Merge branch 'dev-ltx' into dev/3.1_release_merge

# Conflicts:
#	src/main/java/com/ai/da/service/impl/DesignItemServiceImpl.java
This commit is contained in:
litianxiang
2025-12-01 17:10:35 +08:00
176 changed files with 2733 additions and 2810 deletions

938
pom.xml
View File

@@ -1,468 +1,470 @@
<?xml version="1.0" encoding="UTF-8"?> <?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" <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"> 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> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version> <version>3.1.6</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.aida</groupId> <groupId>com.aida</groupId>
<artifactId>aida</artifactId> <artifactId>aida</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>aida</name> <name>aida</name>
<description>ai da</description> <description>ai da</description>
<properties> <properties>
<java.version>8</java.version> <java.version>21</java.version>
<mybatis.plus.version>3.5.2</mybatis.plus.version> <mybatis.plus.version>3.5.5</mybatis.plus.version>
<hutool.version>5.8.2</hutool.version> <hutool.version>5.8.23</hutool.version>
<wx.java.version>4.2.7.B</wx.java.version> <wx.java.version>4.2.7.B</wx.java.version>
<fastjson.version>2.0.6.graal</fastjson.version> <fastjson.version>2.0.43</fastjson.version>
<security.jwt.version>1.1.1.RELEASE</security.jwt.version> <jjwt.version>0.12.3</jjwt.version>
<jjwt.version>0.9.1</jjwt.version> <guava.version>32.1.3-jre</guava.version>
<guava.version>31.1-jre</guava.version>
<easy-captcha>1.6.2</easy-captcha>
<jaxb-api>2.4.0-b180830.0359</jaxb-api> <aws.java.sdk.version>2.20.43</aws.java.sdk.version>
<jaxb-impl>4.0.0</jaxb-impl>
<jaxb-core>4.0.0</jaxb-core> <javacv.version>1.5.5</javacv.version>
<activation>1.1.1</activation> <system.windowsx64>windows-x86_64</system.windowsx64>
<easy-captcha>1.6.2</easy-captcha> <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
<aws.java.sdk.version>2.20.43</aws.java.sdk.version> </properties>
<dependencyManagement>
<javacv.version>1.5.5</javacv.version> <dependencies>
<system.windowsx64>windows-x86_64</system.windowsx64> <dependency>
<javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64> <groupId>software.amazon.awssdk</groupId>
</properties> <artifactId>bom</artifactId>
<dependencyManagement> <version>${aws.java.sdk.version}</version>
<dependencies> <type>pom</type>
<dependency> <scope>import</scope>
<groupId>software.amazon.awssdk</groupId> </dependency>
<artifactId>bom</artifactId> </dependencies>
<version>${aws.java.sdk.version}</version> </dependencyManagement>
<type>pom</type> <dependencies>
<scope>import</scope> <dependency>
</dependency> <groupId>org.springframework.boot</groupId>
</dependencies> <artifactId>spring-boot-starter-web</artifactId>
</dependencyManagement> </dependency>
<dependencies> <dependency>
<dependency> <groupId>org.projectlombok</groupId>
<groupId>org.springframework.boot</groupId> <artifactId>lombok</artifactId>
<artifactId>spring-boot-starter-web</artifactId> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>lombok</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<optional>true</optional> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
<scope>test</scope> </dependency>
</dependency> <dependency>
<dependency> <groupId>org.springframework.boot</groupId>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId>
<artifactId>spring-boot-starter-data-redis</artifactId> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId> <artifactId>spring-boot-starter-security</artifactId>
<optional>true</optional> </dependency>
</dependency> <dependency>
<dependency> <groupId>com.mysql</groupId>
<groupId>org.springframework.boot</groupId> <artifactId>mysql-connector-j</artifactId>
<artifactId>spring-boot-starter-security</artifactId> </dependency>
</dependency> <dependency>
<dependency> <groupId>com.baomidou</groupId>
<groupId>org.springframework.security</groupId> <artifactId>mybatis-plus-boot-starter</artifactId>
<artifactId>spring-security-jwt</artifactId> <version>${mybatis.plus.version}</version>
<version>${security.jwt.version}</version> </dependency>
</dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId> <dependency>
<artifactId>mybatis-plus-boot-starter</artifactId> <groupId>org.springframework.boot</groupId>
<version>${mybatis.plus.version}</version> <artifactId>spring-boot-starter-logging</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>cn.hutool</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>hutool-all</artifactId>
</dependency> <version>${hutool.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>com.alibaba</groupId>
<artifactId>spring-boot-starter-logging</artifactId> <artifactId>fastjson</artifactId>
</dependency> <version>${fastjson.version}</version>
</dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>hutool-all</artifactId> <artifactId>jjwt-api</artifactId>
<version>${hutool.version}</version> <version>${jjwt.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>fastjson</artifactId> <artifactId>jjwt-impl</artifactId>
<version>${fastjson.version}</version> <version>${jjwt.version}</version>
</dependency> <scope>runtime</scope>
<dependency> </dependency>
<groupId>io.jsonwebtoken</groupId> <dependency>
<artifactId>jjwt</artifactId> <groupId>io.jsonwebtoken</groupId>
<version>${jjwt.version}</version> <artifactId>jjwt-jackson</artifactId>
</dependency> <version>${jjwt.version}</version>
<dependency> <scope>runtime</scope>
<groupId>com.squareup.okhttp3</groupId> </dependency>
<artifactId>okhttp</artifactId> <dependency>
<version>3.14.2</version> <groupId>com.squareup.okhttp3</groupId>
</dependency> <artifactId>okhttp</artifactId>
<dependency> <version>3.14.2</version>
<groupId>javax.xml.bind</groupId> </dependency>
<artifactId>jaxb-api</artifactId> <!-- JAXB is included in Java 11+ but needs explicit dependency for Java 9-10 -->
<version>${jaxb-api}</version> <!-- For Java 21, these are not needed as JAXB is part of JDK -->
</dependency> <dependency>
<dependency> <groupId>com.github.whvcse</groupId>
<groupId>com.sun.xml.bind</groupId> <artifactId>easy-captcha</artifactId>
<artifactId>jaxb-impl</artifactId> <version>${easy-captcha}</version>
<version>${jaxb-impl}</version> </dependency>
</dependency> <dependency>
<dependency> <groupId>com.google.guava</groupId>
<groupId>com.sun.xml.bind</groupId> <artifactId>guava</artifactId>
<artifactId>jaxb-core</artifactId> <version>${guava.version}</version>
<version>${jaxb-core}</version> </dependency>
</dependency>
<dependency> <dependency>
<groupId>javax.activation</groupId> <groupId>com.github.xiaoymin</groupId>
<artifactId>activation</artifactId> <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
<version>${activation}</version> <version>4.4.0</version>
</dependency> </dependency>
<dependency> <!-- Swagger 2 annotations for backward compatibility -->
<groupId>com.github.whvcse</groupId> <dependency>
<artifactId>easy-captcha</artifactId> <groupId>io.swagger</groupId>
<version>${easy-captcha}</version> <artifactId>swagger-annotations</artifactId>
</dependency> <version>1.6.14</version>
<dependency> </dependency>
<groupId>com.google.guava</groupId> <!-- /**发送邮件**/-->
<artifactId>guava</artifactId> <!-- <dependency>-->
<version>${guava.version}</version> <!-- <groupId>com.tencentcloudapi</groupId>-->
</dependency> <!-- <artifactId>tencentcloud-sdk-java-ses</artifactId>-->
<!-- <version>3.1.572</version>-->
<dependency> <!-- </dependency>-->
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId> <dependency>
<version>3.0.3</version> <groupId>com.tencentcloudapi</groupId>
</dependency> <artifactId>tencentcloud-sdk-java-ses</artifactId>
<!-- /**发送邮件**/--> <version>3.1.572</version>
<!-- <dependency>--> </dependency>
<!-- <groupId>com.tencentcloudapi</groupId>-->
<!-- <artifactId>tencentcloud-sdk-java-ses</artifactId>--> <!--minio-->
<!-- <version>3.1.572</version>--> <dependency>
<!-- </dependency>--> <groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<dependency> <version>8.0.3</version>
<groupId>com.tencentcloudapi</groupId> </dependency>
<artifactId>tencentcloud-sdk-java-ses</artifactId>
<version>3.1.572</version> <dependency>
</dependency> <groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<!--minio--> <version>1.4</version>
<dependency> </dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId> <dependency>
<version>8.0.3</version> <groupId>com.microsoft.sqlserver</groupId>
</dependency> <artifactId>mssql-jdbc</artifactId>
<version>12.4.2.jre11</version>
<dependency> </dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId> <!-- RabbitMQ -->
<version>1.4</version> <dependency>
</dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<dependency> </dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId> <!-- redis 连接池 -->
<version>9.2.1.jre8</version> <dependency>
</dependency> <groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<!-- RabbitMQ --> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId> <!--支付宝 SDK-->
<artifactId>spring-boot-starter-amqp</artifactId> <dependency>
</dependency> <groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<!-- redis 连接池 --> <version>4.22.57.ALL</version>
<dependency> </dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId> <!--PayPal SDK-->
</dependency> <dependency>
<groupId>com.paypal.sdk</groupId>
<!--支付宝 SDK--> <artifactId>checkout-sdk</artifactId>
<dependency> <version>1.0.5</version>
<groupId>com.alipay.sdk</groupId> </dependency>
<artifactId>alipay-sdk-java</artifactId>
<version>4.22.57.ALL</version> <dependency>
</dependency> <groupId>com.paypal.sdk</groupId>
<artifactId>rest-api-sdk</artifactId>
<!--PayPal SDK--> <version>LATEST</version>
<dependency> </dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>checkout-sdk</artifactId> <dependency>
<version>1.0.5</version> <groupId>org.json</groupId>
</dependency> <artifactId>json</artifactId>
<version>20230618</version>
<dependency> </dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>rest-api-sdk</artifactId> <dependency>
<version>LATEST</version> <groupId>org.apache.poi</groupId>
</dependency> <artifactId>poi</artifactId>
<version>5.2.4</version>
<dependency> </dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId> <dependency>
<version>20230618</version> <groupId>org.apache.poi</groupId>
</dependency> <artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
<dependency> </dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId> <dependency>
<version>2.17.1</version> <groupId>commons-io</groupId>
</dependency> <artifactId>commons-io</artifactId>
<version>2.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId> <dependency>
<artifactId>poi</artifactId> <groupId>com.stripe</groupId>
<version>5.2.1</version> <artifactId>stripe-java</artifactId>
</dependency> <version>26.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId> <!-- aws s3 -->
<artifactId>poi-ooxml</artifactId> <!-- S3 dependency -->
<version>5.2.1</version> <dependency>
</dependency> <groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<dependency> </dependency>
<groupId>commons-io</groupId> <dependency>
<artifactId>commons-io</artifactId> <groupId>software.amazon.awssdk</groupId>
<version>2.11.0</version> <artifactId>s3-transfer-manager</artifactId>
</dependency> <version>2.17.103-PREVIEW</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>software.amazon.awssdk</groupId>
<artifactId>log4j-api</artifactId> <artifactId>kms</artifactId>
<version>2.17.1</version> </dependency>
</dependency> <dependency>
<groupId>software.amazon.awssdk</groupId>
<dependency> <artifactId>s3control</artifactId>
<groupId>com.stripe</groupId> </dependency>
<artifactId>stripe-java</artifactId>
<version>26.2.0</version> <dependency>
</dependency> <groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<!-- aws s3 --> <version>2.10.1</version>
<!-- S3 dependency --> </dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId> <dependency>
<artifactId>s3</artifactId> <groupId>com.itextpdf</groupId>
</dependency> <artifactId>itextpdf</artifactId>
<dependency> <version>5.5.13.2</version>
<groupId>software.amazon.awssdk</groupId> </dependency>
<artifactId>s3-transfer-manager</artifactId>
<version>2.17.103-PREVIEW</version> <dependency>
</dependency> <groupId>org.springframework.boot</groupId>
<dependency> <artifactId>spring-boot-starter-websocket</artifactId>
<groupId>software.amazon.awssdk</groupId> </dependency>
<artifactId>kms</artifactId>
</dependency> <dependency>
<dependency> <groupId>com.google.auth</groupId>
<groupId>software.amazon.awssdk</groupId> <artifactId>google-auth-library-oauth2-http</artifactId>
<artifactId>s3control</artifactId> <version>1.8.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.api-client</groupId>
<artifactId>gson</artifactId> <artifactId>google-api-client</artifactId>
<version>2.10.1</version> <version>1.32.1</version>
</dependency> </dependency>
<dependency>
<dependency> <groupId>com.google.oauth-client</groupId>
<groupId>com.itextpdf</groupId> <artifactId>google-oauth-client</artifactId>
<artifactId>itextpdf</artifactId> <version>1.32.1</version>
<version>5.5.13.2</version> </dependency>
</dependency> <dependency>
<groupId>com.google.http-client</groupId>
<dependency> <artifactId>google-http-client-jackson2</artifactId>
<groupId>org.springframework.boot</groupId> <version>1.41.5</version>
<artifactId>spring-boot-starter-websocket</artifactId> </dependency>
</dependency>
<!-- 邮件发送 -->
<dependency> <!-- thymeleaf -->
<groupId>com.google.auth</groupId> <dependency>
<artifactId>google-auth-library-oauth2-http</artifactId> <groupId>org.springframework.boot</groupId>
<version>1.8.0</version> <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> </dependency>
<dependency>
<dependency> <groupId>org.springframework.boot</groupId>
<groupId>com.google.api-client</groupId> <artifactId>spring-boot-starter-mail</artifactId>
<artifactId>google-api-client</artifactId> </dependency>
<version>1.32.1</version>
</dependency> <dependency>
<dependency> <groupId>com.alibaba</groupId>
<groupId>com.google.oauth-client</groupId> <artifactId>easyexcel</artifactId>
<artifactId>google-oauth-client</artifactId> <version>3.3.3</version>
<version>1.32.1</version> </dependency>
</dependency> <!-- JSON 转义恢复 -->
<dependency> <dependency>
<groupId>com.google.http-client</groupId> <groupId>org.apache.commons</groupId>
<artifactId>google-http-client-jackson2</artifactId> <artifactId>commons-text</artifactId>
<version>1.41.5</version> <version>1.10.0</version> <!-- 使用最新版本 -->
</dependency> </dependency>
<!-- 邮件发送 --> <!-- 最新版本号https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
<!-- thymeleaf --> <!-- 万象SDK -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>com.alibaba</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId> <artifactId>dashscope-sdk-java</artifactId>
</dependency> <version>2.20.1</version>
<dependency> </dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId> <!-- FFmpeg封装JavaCV 视频转gif 全部依赖-->
</dependency> <!--<dependency>
<groupId>org.bytedeco</groupId>
<dependency> <artifactId>javacv-platform</artifactId>
<groupId>com.alibaba</groupId> <version>1.5.9</version>
<artifactId>easyexcel</artifactId> </dependency>-->
<version>3.3.2</version>
</dependency> <!-- javacv+javacpp核心库-->
<!-- JSON 转义恢复 --> <dependency>
<dependency> <groupId>org.bytedeco</groupId>
<groupId>org.apache.commons</groupId> <artifactId>javacv</artifactId>
<artifactId>commons-text</artifactId> <version>${javacv.version}</version>
<version>1.10.0</version> <!-- 使用最新版本 --> </dependency>
</dependency> <dependency>
<groupId>org.bytedeco</groupId>
<!-- 最新版本号https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java --> <artifactId>javacpp-platform</artifactId>
<!-- 万象SDK --> <version>${javacv.version}</version>
<dependency> </dependency>
<groupId>com.alibaba</groupId> <!-- 最小opencv依赖包 必须包含上面的javacv+javacpp -->
<artifactId>dashscope-sdk-java</artifactId> <dependency>
<version>2.20.1</version> <groupId>org.bytedeco</groupId>
</dependency> <artifactId>opencv</artifactId>
<version>4.5.1-${javacv.version}</version>
<!-- FFmpeg封装JavaCV 视频转gif 全部依赖--> <!--<classifier>${system.windowsx64}</classifier>-->
<!--<dependency> <classifier>${javacpp.platform.linux-x86_64}</classifier>
<groupId>org.bytedeco</groupId> </dependency>
<artifactId>javacv-platform</artifactId> <dependency>
<version>1.5.9</version> <groupId>org.bytedeco</groupId>
</dependency>--> <artifactId>openblas</artifactId>
<version>0.3.13-${javacv.version}</version>
<!-- javacv+javacpp核心库--> <!--<classifier>${system.windowsx64}</classifier>-->
<dependency> <classifier>${javacpp.platform.linux-x86_64}</classifier>
<groupId>org.bytedeco</groupId> </dependency>
<artifactId>javacv</artifactId> <dependency>
<version>${javacv.version}</version> <groupId>org.bytedeco</groupId>
</dependency> <artifactId>flycapture</artifactId>
<dependency> <version>2.13.3.31-${javacv.version}</version>
<groupId>org.bytedeco</groupId> <!--<classifier>${system.windowsx64}</classifier>-->
<artifactId>javacpp-platform</artifactId> <classifier>${javacpp.platform.linux-x86_64}</classifier>
<version>${javacv.version}</version> </dependency>
</dependency> <!-- FFmpeg视频处理解决你的报错 -->
<!-- 最小opencv依赖包 必须包含上面的javacv+javacpp --> <dependency>
<dependency> <groupId>org.bytedeco</groupId>
<groupId>org.bytedeco</groupId> <artifactId>ffmpeg</artifactId>
<artifactId>opencv</artifactId> <version>4.4-1.5.6</version>
<version>4.5.1-${javacv.version}</version> <!--<classifier>${system.windowsx64}</classifier>-->
<!--<classifier>${system.windowsx64}</classifier>--> <classifier>${javacpp.platform.linux-x86_64}</classifier>
<classifier>${javacpp.platform.linux-x86_64}</classifier> </dependency>
</dependency>
<dependency> <dependency>
<groupId>org.bytedeco</groupId> <groupId>com.volcengine</groupId>
<artifactId>openblas</artifactId> <artifactId>volcengine-java-sdk-ark-runtime</artifactId>
<version>0.3.13-${javacv.version}</version> <version>0.2.43</version>
<!--<classifier>${system.windowsx64}</classifier>--> </dependency>
<classifier>${javacpp.platform.linux-x86_64}</classifier>
</dependency> <!-- Google 认证库 -->
<dependency> <dependency>
<groupId>org.bytedeco</groupId> <groupId>com.google.auth</groupId>
<artifactId>flycapture</artifactId> <artifactId>google-auth-library-oauth2-http</artifactId>
<version>2.13.3.31-${javacv.version}</version> <version>1.38.0</version>
<!--<classifier>${system.windowsx64}</classifier>--> </dependency>
<classifier>${javacpp.platform.linux-x86_64}</classifier>
</dependency>
<!-- FFmpeg视频处理解决你的报错 --> <!-- GIFEncoder 视频转gif-->
<dependency> <dependency>
<groupId>org.bytedeco</groupId> <groupId>com.madgag</groupId>
<artifactId>ffmpeg</artifactId> <artifactId>animated-gif-lib</artifactId>
<version>4.4-1.5.6</version> <version>1.4</version>
<!--<classifier>${system.windowsx64}</classifier>--> </dependency>
<classifier>${javacpp.platform.linux-x86_64}</classifier>
</dependency> <!-- Jakarta WebSocket API -->
<dependency>
<dependency> <groupId>jakarta.websocket</groupId>
<groupId>com.volcengine</groupId> <artifactId>jakarta.websocket-api</artifactId>
<artifactId>volcengine-java-sdk-ark-runtime</artifactId> <version>2.1.1</version>
<version>0.2.43</version> </dependency>
</dependency>
<!-- Spring MockMultipartFile 等测试工具,生产代码中也有引用 -->
<!-- Google 认证库 --> <dependency>
<dependency> <groupId>org.springframework</groupId>
<groupId>com.google.auth</groupId> <artifactId>spring-test</artifactId>
<artifactId>google-auth-library-oauth2-http</artifactId> </dependency>
<version>1.38.0</version>
</dependency> <!-- BouncyCastle 加密库 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<!-- GIFEncoder 视频转gif--> <artifactId>bcprov-jdk18on</artifactId>
<dependency> <version>1.78.1</version>
<groupId>com.madgag</groupId> </dependency>
<artifactId>animated-gif-lib</artifactId> <dependency>
<version>1.4</version> <groupId>org.bouncycastle</groupId>
</dependency> <artifactId>bcpkix-jdk18on</artifactId>
</dependencies> <version>1.78.1</version>
</dependency>
<build> </dependencies>
<plugins>
<plugin> <build>
<groupId>org.springframework.boot</groupId> <plugins>
<artifactId>spring-boot-maven-plugin</artifactId> <plugin>
<configuration> <groupId>org.springframework.boot</groupId>
<excludes> <artifactId>spring-boot-maven-plugin</artifactId>
<exclude> <configuration>
<groupId>org.projectlombok</groupId> <excludes>
<artifactId>lombok</artifactId> <exclude>
</exclude> <groupId>org.projectlombok</groupId>
</excludes> <artifactId>lombok</artifactId>
</configuration> </exclude>
</plugin> </excludes>
</plugins> </configuration>
</build> </plugin>
</plugins>
<profiles> </build>
<profile>
<!-- 本地开发环境 --> <profiles>
<id>dev</id> <profile>
<properties> <!-- 本地开发环境 -->
<profiles.active>dev</profiles.active> <id>dev</id>
</properties> <properties>
<activation> <profiles.active>dev</profiles.active>
<activeByDefault>true</activeByDefault> </properties>
</activation> <activation>
</profile> <activeByDefault>true</activeByDefault>
<profile> </activation>
<!-- 测试环境 --> </profile>
<id>test</id> <profile>
<properties> <!-- 测试环境 -->
<profiles.active>test</profiles.active> <id>test</id>
</properties> <properties>
</profile> <profiles.active>test</profiles.active>
<profile> </properties>
<!-- 生产环境 --> </profile>
<id>prod</id> <profile>
<properties> <!-- 生产环境 -->
<profiles.active>prod</profiles.active> <id>prod</id>
</properties> <properties>
</profile> <profiles.active>prod</profiles.active>
</profiles> </properties>
</project> </profile>
</profiles>
</project>

View File

@@ -13,9 +13,8 @@ import org.springframework.stereotype.Component;
import software.amazon.awssdk.core.exception.RetryableException; import software.amazon.awssdk.core.exception.RetryableException;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.mail.MessagingException;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;

View File

@@ -5,7 +5,7 @@ import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j

View File

@@ -19,7 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import javax.annotation.Resource; import jakarta.annotation.Resource;
@Configuration @Configuration
//加载配置文件 //加载配置文件

View File

@@ -24,6 +24,7 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.core.parameters.P; import org.springframework.security.core.parameters.P;
@@ -32,8 +33,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StopWatch; import org.springframework.util.StopWatch;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;

View File

@@ -14,8 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;

View File

@@ -1,42 +1,42 @@
package com.ai.da.common.config; package com.ai.da.common.config;
import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.validation.Validation; import jakarta.validation.Validation;
import javax.validation.Validator; import jakarta.validation.Validator;
import javax.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
@Configuration @Configuration
public class WebConfig extends WebMvcConfigurerAdapter { public class WebConfig implements WebMvcConfigurer {
static final String ORIGINS[] = new String[]{"GET", "POST", "PUT", "DELETE"}; static final String ORIGINS[] = new String[]{"GET", "POST", "PUT", "DELETE"};
@Override @Override
public void addCorsMappings(CorsRegistry registry) { public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600); registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
} }
@Bean @Bean
public Validator validator() { public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure() .configure()
//failFast为true出现校验失败的情况立即结束校验不再进行后续的校验 //failFast为true出现校验失败的情况立即结束校验不再进行后续的校验
.failFast(true) .failFast(true)
.buildValidatorFactory(); .buildValidatorFactory();
return validatorFactory.getValidator(); return validatorFactory.getValidator();
} }
@Bean @Bean
public MethodValidationPostProcessor methodValidationPostProcessor() { public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor(); MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator()); methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor; return methodValidationPostProcessor;
} }
} }

View File

@@ -1,37 +0,0 @@
package com.ai.da.common.config.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@Configuration
@EnableSwagger2WebMvc
public class AidaConfiguration {
@Bean(value = "IntelligentCurtainApis")
public Docket gxyd5aThemeApis() {
Contact contact = new Contact("Mr.Y", "", "136");
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.description("aida接口文档")
.contact(contact)
.termsOfServiceUrl("暂无")
.version("1.0")
.build())
//分组名称
.groupName("1.0")
.select()
//这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.ai.da.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
}

View File

@@ -7,8 +7,8 @@ import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
/** /**

View File

@@ -7,9 +7,9 @@ import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
/** /**

View File

@@ -5,7 +5,7 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
/** /**
* @author: dangweijian * @author: dangweijian

View File

@@ -10,9 +10,9 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
/** /**

View File

@@ -8,10 +8,10 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
/** /**

View File

@@ -1,84 +1,97 @@
package com.ai.da.common.security.config; package com.ai.da.common.security.config;
import com.ai.da.common.security.*; import com.ai.da.common.security.*;
import com.ai.da.common.security.filter.AuthenticationFilter; import com.ai.da.common.security.filter.AuthenticationFilter;
import com.ai.da.common.security.filter.UserAuthenticationProcessingFilter; import com.ai.da.common.security.filter.UserAuthenticationProcessingFilter;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler; import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import javax.annotation.Resource; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
@EnableWebSecurity import jakarta.annotation.Resource;
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableConfigurationProperties(SecurityProperties.class) @Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter { @EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
@Resource @EnableConfigurationProperties(SecurityProperties.class)
private SecurityProperties securityProperties; public class SecurityConfig {
@Resource
private UserLoginSuccessHandler userLoginSuccessHandler; @Resource
@Resource private SecurityProperties securityProperties;
private UserLoginFailureHandler userLoginFailureHandler; @Resource
@Resource private UserLoginSuccessHandler userLoginSuccessHandler;
private UserAuthAccessDeniedHandler userAuthAccessDeniedHandler; @Resource
@Resource private UserLoginFailureHandler userLoginFailureHandler;
private UserAuthenticationEntryPointHandler userAuthenticationEntryPointHandler; @Resource
@Resource private UserAuthAccessDeniedHandler userAuthAccessDeniedHandler;
private UserAuthenticationManager userAuthenticationManager; @Resource
@Resource private UserAuthenticationEntryPointHandler userAuthenticationEntryPointHandler;
private UserAuthenticationProcessingFilter userAuthenticationProcessingFilter; @Resource
private UserAuthenticationManager userAuthenticationManager;
/** @Resource
* 不通过注入spring管理 让Security来管理 这样自定义的Filter就不会走,.permitAll()才能起作用 private UserAuthenticationProcessingFilter userAuthenticationProcessingFilter;
*/
@Resource /**
private AuthenticationFilter authenticationFilter; * 不通过注入spring管理 让Security来管理 这样自定义的Filter就不会走,.permitAll()才能起作用
@Resource */
private UserPermissionEvaluator userPermissionEvaluator; @Resource
private AuthenticationFilter authenticationFilter;
@Resource
@Override private UserPermissionEvaluator userPermissionEvaluator;
public AuthenticationManager authenticationManagerBean() throws Exception {
return this.userAuthenticationManager; @Bean
} public AuthenticationManager authenticationManager() throws Exception {
return this.userAuthenticationManager;
@Override }
protected void configure(HttpSecurity httpSecurity/*, WebSecurity web*/) throws Exception {
// web.ignoring().antMatchers("/test/**");//禁止所有过滤器 @Bean
httpSecurity.cors().disable()//禁用 CSRF public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
.authorizeRequests()//认证请求 httpSecurity
.antMatchers(securityProperties.getIgnorePaths()).permitAll()//忽略的请求 .cors(AbstractHttpConfigurer::disable)
.anyRequest().authenticated()//其余所有的请求都需要认证 .authorizeHttpRequests(auth -> auth
.and().headers().frameOptions().disable()// 防止iframe 造成跨域 .requestMatchers(securityProperties.getIgnorePaths()).permitAll()
.and().exceptionHandling().authenticationEntryPoint(userAuthenticationEntryPointHandler)//未登录请求处理 .anyRequest().authenticated()
.accessDeniedHandler(userAuthAccessDeniedHandler)//无权限访问处理类 (此配置可以忽略全局异常会先于Security框架处理异常全局异常已特殊处理) )
.and().formLogin().loginProcessingUrl(securityProperties.getAuthApi())//指定认证接口 .headers(headers -> headers
.successHandler(userLoginSuccessHandler)//登录成功处理器 .frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)
.failureHandler(userLoginFailureHandler)//登录失败处理器 .cacheControl(cache -> cache.disable())
.and().cors().and().csrf().disable();//允许跨域 )
//自定义过滤器在登录时认证用户名、密码 .exceptionHandling(exception -> exception
httpSecurity.addFilterAt(userAuthenticationProcessingFilter, UsernamePasswordAuthenticationFilter.class) .authenticationEntryPoint(userAuthenticationEntryPointHandler)
.addFilterBefore(authenticationFilter, BasicAuthenticationFilter.class); .accessDeniedHandler(userAuthAccessDeniedHandler)
//不创建session会话 )
httpSecurity.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); .formLogin(form -> form
//取消头缓存控制 .loginProcessingUrl(securityProperties.getAuthApi())
httpSecurity.headers().cacheControl(); .successHandler(userLoginSuccessHandler)
} .failureHandler(userLoginFailureHandler)
)
@Bean .cors(AbstractHttpConfigurer::disable)
public DefaultWebSecurityExpressionHandler userSecurityExpressionHandler() { .csrf(AbstractHttpConfigurer::disable)
DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler(); .sessionManagement(session -> session
handler.setPermissionEvaluator(userPermissionEvaluator); .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
return handler; );
}
} //自定义过滤器在登录时认证用户名、密码
httpSecurity.addFilterAt(userAuthenticationProcessingFilter, UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(authenticationFilter, BasicAuthenticationFilter.class);
return httpSecurity.build();
}
@Bean
public DefaultWebSecurityExpressionHandler userSecurityExpressionHandler() {
DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
handler.setPermissionEvaluator(userPermissionEvaluator);
return handler;
}
}

View File

@@ -18,12 +18,11 @@ import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.security.sasl.AuthenticationException; import jakarta.servlet.FilterChain;
import javax.servlet.FilterChain; import jakarta.servlet.ServletException;
import javax.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -104,7 +103,7 @@ public class AuthenticationFilter extends OncePerRequestFilter {
return authorizationHeader != null && authorizationHeader.startsWith("Bearer"); return authorizationHeader != null && authorizationHeader.startsWith("Bearer");
} }
private void extracted(HttpServletRequest request) throws AuthenticationException { private void extracted(HttpServletRequest request) {
String jwtToken = request.getHeader(properties.getJwtTokenHeader()); String jwtToken = request.getHeader(properties.getJwtTokenHeader());
// log.debug("后台检查令牌:{}", jwtToken); // log.debug("后台检查令牌:{}", jwtToken);

View File

@@ -1,69 +1,69 @@
package com.ai.da.common.security.filter; package com.ai.da.common.security.filter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ai.da.common.security.UserLoginSuccessHandler; import com.ai.da.common.security.UserLoginSuccessHandler;
import com.ai.da.common.security.config.SecurityProperties; import com.ai.da.common.security.config.SecurityProperties;
import com.ai.da.common.utils.RedisCacheUtils; import com.ai.da.common.utils.RedisCacheUtils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ai.da.common.security.UserAuthenticationManager; import com.ai.da.common.security.UserAuthenticationManager;
import com.ai.da.common.security.UserLoginFailureHandler; import com.ai.da.common.security.UserLoginFailureHandler;
import com.ai.da.common.utils.MultiReadHttpServletRequest; import com.ai.da.common.utils.MultiReadHttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
/** /**
* @author: dangweijian * @author: dangweijian
* @description: 用户认证过滤器 * @description: 用户认证过滤器
* @create: 2020-07-10 15:58 * @create: 2020-07-10 15:58
**/ **/
@Slf4j @Slf4j
@Component @Component
public class UserAuthenticationProcessingFilter extends AbstractAuthenticationProcessingFilter { public class UserAuthenticationProcessingFilter extends AbstractAuthenticationProcessingFilter {
/** /**
* @param securityProperties 配置从配置中读取登录url * @param securityProperties 配置从配置中读取登录url
* @param authenticationManager 认证管理器 * @param authenticationManager 认证管理器
* @param adminAuthenticationSuccessHandler 认证成功处理器 * @param adminAuthenticationSuccessHandler 认证成功处理器
* @param adminAuthenticationFailureHandler 认证失败处理器 * @param adminAuthenticationFailureHandler 认证失败处理器
*/ */
public UserAuthenticationProcessingFilter(SecurityProperties securityProperties, UserAuthenticationManager authenticationManager, UserLoginSuccessHandler adminAuthenticationSuccessHandler, UserLoginFailureHandler adminAuthenticationFailureHandler) { public UserAuthenticationProcessingFilter(SecurityProperties securityProperties, UserAuthenticationManager authenticationManager, UserLoginSuccessHandler adminAuthenticationSuccessHandler, UserLoginFailureHandler adminAuthenticationFailureHandler) {
super(new AntPathRequestMatcher(securityProperties.getAuthApi(), HttpMethod.POST.name())); super(new AntPathRequestMatcher(securityProperties.getAuthApi(), HttpMethod.POST.name()));
this.setAuthenticationManager(authenticationManager); this.setAuthenticationManager(authenticationManager);
this.setAuthenticationSuccessHandler(adminAuthenticationSuccessHandler); this.setAuthenticationSuccessHandler(adminAuthenticationSuccessHandler);
this.setAuthenticationFailureHandler(adminAuthenticationFailureHandler); this.setAuthenticationFailureHandler(adminAuthenticationFailureHandler);
} }
@Override @Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
if (request.getContentType() == null || !request.getContentType().contains("application/json")) { if (request.getContentType() == null || !request.getContentType().contains("application/json")) {
throw new AuthenticationServiceException("请求头类型不支持: " + request.getContentType()); throw new AuthenticationServiceException("请求头类型不支持: " + request.getContentType());
} }
UsernamePasswordAuthenticationToken authRequest; UsernamePasswordAuthenticationToken authRequest;
try { try {
MultiReadHttpServletRequest wrappedRequest = new MultiReadHttpServletRequest(request); MultiReadHttpServletRequest wrappedRequest = new MultiReadHttpServletRequest(request);
// 将前端传递的数据转换成jsonBean数据格式 // 将前端传递的数据转换成jsonBean数据格式
JSONObject jsonObject = JSONObject.parseObject(wrappedRequest.getBodyJsonStrByJson(wrappedRequest)); JSONObject jsonObject = JSONObject.parseObject(wrappedRequest.getBodyJsonStrByJson(wrappedRequest));
String code = jsonObject.getString("code"); String code = jsonObject.getString("code");
String uuid = jsonObject.getString("uuid"); String uuid = jsonObject.getString("uuid");
if (StrUtil.isEmpty(code) || StrUtil.isEmpty(uuid) || !code.equals(RedisCacheUtils.get("code-key-" + uuid, String.class))) { if (StrUtil.isEmpty(code) || StrUtil.isEmpty(uuid) || !code.equals(RedisCacheUtils.get("code-key-" + uuid, String.class))) {
throw new AuthenticationServiceException("验证码错误"); throw new AuthenticationServiceException("验证码错误");
} }
RedisCacheUtils.delete("code-key-" + uuid); RedisCacheUtils.delete("code-key-" + uuid);
authRequest = new UsernamePasswordAuthenticationToken(jsonObject.get("username"), jsonObject.get("password"), null); authRequest = new UsernamePasswordAuthenticationToken(jsonObject.get("username"), jsonObject.get("password"), null);
authRequest.setDetails(authenticationDetailsSource.buildDetails(wrappedRequest)); authRequest.setDetails(authenticationDetailsSource.buildDetails(wrappedRequest));
} catch (Exception e) { } catch (Exception e) {
throw new AuthenticationServiceException(e.getMessage()); throw new AuthenticationServiceException(e.getMessage());
} }
return this.getAuthenticationManager().authenticate(authRequest); return this.getAuthenticationManager().authenticate(authRequest);
} }
} }

View File

@@ -1,87 +1,108 @@
package com.ai.da.common.security.jwt; package com.ai.da.common.security.jwt;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ai.da.common.constant.CommonConstant; import cn.hutool.crypto.digest.DigestUtil;
import com.ai.da.common.security.config.SecurityProperties; import com.ai.da.common.constant.CommonConstant;
import com.ai.da.model.vo.AuthPrincipalVo; import com.ai.da.common.security.config.SecurityProperties;
import com.alibaba.fastjson.JSON; import com.ai.da.model.vo.AuthPrincipalVo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSON;
import io.jsonwebtoken.Claims; import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.Jwts;
import lombok.extern.slf4j.Slf4j; import io.jsonwebtoken.security.Keys;
import org.springframework.stereotype.Component; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList; import jakarta.annotation.Resource;
import java.util.Date; import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
/** import java.util.ArrayList;
* @author: dangweijian import java.util.Date;
* @description: JWT工具
* @create: 2020-07-09 09:27 /**
**/ * @author: dangweijian
@Slf4j * @description: JWT工具
@Component * @create: 2020-07-09 09:27
public class JWTTokenHelper { **/
@Slf4j
@Resource @Component
private SecurityProperties securityProperties; public class JWTTokenHelper {
private static final String ISSUER = "DWJ"; @Resource
private static final String AUTHORITIES = "authorities"; private SecurityProperties securityProperties;
private static final String CHANGE_MAILBOX = "changeMailbox";
private static final String ISSUER = "DWJ";
public String createToken(AuthPrincipalVo principal) { private static final String AUTHORITIES = "authorities";
String token = Jwts.builder() private static final String CHANGE_MAILBOX = "changeMailbox";
.setId(String.valueOf(principal.getId()))
.setSubject(JSONObject.toJSONString(principal)) public String createToken(AuthPrincipalVo principal) {
.setIssuedAt(new Date()) SecretKey key = buildSigningKey();
.setIssuer(ISSUER) String token = Jwts.builder()
.claim(AUTHORITIES, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限 .id(String.valueOf(principal.getId()))
.setExpiration(new Date(System.currentTimeMillis() + securityProperties.getJwtExpiration())) .subject(JSONObject.toJSONString(principal))
.signWith(SignatureAlgorithm.HS512, securityProperties.getJwtSecret()) .issuedAt(new Date())
.compact(); .issuer(ISSUER)
token = securityProperties.getJwtTokenPrefix() + token; .claim(AUTHORITIES, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限
return token; .expiration(new Date(System.currentTimeMillis() + securityProperties.getJwtExpiration()))
} .signWith(key)
.compact();
public boolean validateToken(String token) { token = securityProperties.getJwtTokenPrefix() + token;
Claims claims = parser(token); return token;
if (MapUtil.isEmpty(claims)) { }
return false;
} public boolean validateToken(String token) {
return true; Claims claims = parser(token);
} if (MapUtil.isEmpty(claims)) {
return false;
public AuthPrincipalVo parserToUser(String token) { }
String subject = parser(token).getSubject(); return true;
if (StrUtil.isNotEmpty(subject)) { }
return JSONObject.parseObject(subject, AuthPrincipalVo.class);
} public AuthPrincipalVo parserToUser(String token) {
return null; String subject = parser(token).getSubject();
} if (StrUtil.isNotEmpty(subject)) {
return JSONObject.parseObject(subject, AuthPrincipalVo.class);
public Claims parser(String token) { }
token = token.replaceAll(securityProperties.getJwtTokenPrefix(), ""); return null;
return Jwts.parser().setSigningKey(securityProperties.getJwtSecret()).parseClaimsJws(token).getBody(); }
}
public Claims parser(String token) {
public String createToken(Long userId, String userEmail){ token = token.replaceAll(securityProperties.getJwtTokenPrefix(), "");
String token = Jwts.builder() SecretKey key = buildSigningKey();
.setId(String.valueOf(userId)) return Jwts.parser()
.setSubject(userEmail + "_" + userId) .verifyWith(key)
.setIssuedAt(new Date()) .build()
.setIssuer(ISSUER) .parseSignedClaims(token)
.claim(CHANGE_MAILBOX, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限 .getPayload();
.setExpiration(new Date(System.currentTimeMillis() + CommonConstant.CHANGE_MAILBOX_LINK_VALIDITY)) }
.signWith(SignatureAlgorithm.HS256, securityProperties.getJwtSecret())
.compact(); public String createToken(Long userId, String userEmail){
return token; SecretKey key = buildSigningKey();
} String token = Jwts.builder()
.id(String.valueOf(userId))
public String parseToEmailAndId(String token) { .subject(userEmail + "_" + userId)
return parser(token).getSubject(); .issuedAt(new Date())
} .issuer(ISSUER)
} .claim(CHANGE_MAILBOX, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限
.expiration(new Date(System.currentTimeMillis() + CommonConstant.CHANGE_MAILBOX_LINK_VALIDITY))
.signWith(key)
.compact();
return token;
}
public String parseToEmailAndId(String token) {
return parser(token).getSubject();
}
/**
* JWT 要求 HMAC-SHA 的密钥至少 256 bit这里统一扩展/哈希密钥长度避免 WeakKeyException。
*/
private SecretKey buildSigningKey() {
byte[] raw = securityProperties.getJwtSecret().getBytes(StandardCharsets.UTF_8);
if (raw.length < 32) {
raw = DigestUtil.sha256(raw);
}
return Keys.hmacShaKeyFor(raw);
}
}

View File

@@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.util.List; import java.util.List;
@Component @Component

View File

@@ -14,7 +14,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

View File

@@ -17,8 +17,8 @@
//import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils; //import org.springframework.util.CollectionUtils;
// //
//import javax.annotation.PostConstruct; //import jakarta.annotation.PostConstruct;
//import javax.annotation.Resource; //import jakarta.annotation.Resource;
//import java.io.FileOutputStream; //import java.io.FileOutputStream;
//import java.io.IOException; //import java.io.IOException;
//import java.nio.file.Files; //import java.nio.file.Files;

View File

@@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;

View File

@@ -1,313 +1,325 @@
package com.ai.da.common.utils; package com.ai.da.common.utils;
import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.model.vo.FileVO; import com.ai.da.model.vo.FileVO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.*; import java.io.*;
import java.net.URL; import java.net.URL;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
public class FileUtil extends cn.hutool.core.io.FileUtil { public class FileUtil extends cn.hutool.core.io.FileUtil {
private static final Logger log = LoggerFactory.getLogger(com.ai.da.common.utils.FileUtil.class); private static final Logger log = LoggerFactory.getLogger(com.ai.da.common.utils.FileUtil.class);
/** /**
* 系统临时目录 * 系统临时目录
* <br> * <br>
* windows 包含路径分割符但Linux 不包含, * windows 包含路径分割符但Linux 不包含,
* 在windows \\==\ 前提下, * 在windows \\==\ 前提下,
* 为安全起见 同意拼装 路径分割符, * 为安全起见 同意拼装 路径分割符,
* <pre> * <pre>
* java.io.tmpdir * java.io.tmpdir
* windows : C:\Users/xxx\AppData\Local\Temp\ * windows : C:\Users/xxx\AppData\Local\Temp\
* linux: /temp * linux: /temp
* </pre> * </pre>
*/ */
public static final String SYS_TEM_DIR = System.getProperty("java.io.tmpdir") + File.separator; public static final String SYS_TEM_DIR = System.getProperty("java.io.tmpdir") + File.separator;
/** /**
* 定义GB的计算常量 * 定义GB的计算常量
*/ */
private static final int GB = 1024 * 1024 * 1024; private static final int GB = 1024 * 1024 * 1024;
/** /**
* 定义MB的计算常量 * 定义MB的计算常量
*/ */
private static final int MB = 1024 * 1024; private static final int MB = 1024 * 1024;
/** /**
* 定义KB的计算常量 * 定义KB的计算常量
*/ */
private static final int KB = 1024; private static final int KB = 1024;
/** /**
* 格式化小数 * 格式化小数
*/ */
private static final DecimalFormat DF = new DecimalFormat("0.00"); private static final DecimalFormat DF = new DecimalFormat("0.00");
public static final String IMAGE = "图片"; public static final String IMAGE = "图片";
public static final String TXT = "文档"; public static final String TXT = "文档";
public static final String MUSIC = "音乐"; public static final String MUSIC = "音乐";
public static final String VIDEO = "视频"; public static final String VIDEO = "视频";
public static final String OTHER = "其他"; public static final String OTHER = "其他";
/** /**
* MultipartFile转File * MultipartFile转File
*/ */
public static File toFile(MultipartFile multipartFile) { public static File toFile(MultipartFile multipartFile) {
// 获取文件名 // 获取文件名
String fileName = multipartFile.getOriginalFilename(); String fileName = multipartFile.getOriginalFilename();
// 获取文件后缀 // 获取文件后缀
String prefix = "." + getExtensionName(fileName); String prefix = "." + getExtensionName(fileName);
File file = null; File file = null;
try { try {
// 用uuid作为文件名防止生成的临时文件重复 // 用uuid作为文件名防止生成的临时文件重复
file = new File(SYS_TEM_DIR + IdUtil.simpleUUID() + prefix); file = new File(SYS_TEM_DIR + IdUtil.simpleUUID() + prefix);
// MultipartFile to File // MultipartFile to File
multipartFile.transferTo(file); multipartFile.transferTo(file);
} catch (IOException e) { } catch (IOException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
return file; return file;
} }
// public static void main(String[] args) { // public static void main(String[] args) {
// File file = new File( // File file = new File(
// "http://18.162.111.141:5568/download/202211/userFile/collection/Printboard/1/a3c9838c-2171-44d7-af54-c94ee6affcd9print_2.jpg.png"); // "http://18.162.111.141:5568/download/202211/userFile/collection/Printboard/1/a3c9838c-2171-44d7-af54-c94ee6affcd9print_2.jpg.png");
// FileUtil.getFileSize() // FileUtil.getFileSize()
// } // }
/** /**
* 获取文件扩展名,不带 . * 获取文件扩展名,不带 .
*/ */
public static String getExtensionName(String filename) { public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) { if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.'); int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) { if ((dot > -1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1); return filename.substring(dot + 1);
} }
} }
return filename; return filename;
} }
/** /**
* inputStream 转 File * inputStream 转 File
*/ */
static File inputStreamToFile(InputStream ins, String name) { static File inputStreamToFile(InputStream ins, String name) {
File file = new File(SYS_TEM_DIR + name); File file = new File(SYS_TEM_DIR + name);
if (file.exists()) { if (file.exists()) {
return file; return file;
} }
OutputStream os = null; OutputStream os = null;
try { try {
os = new FileOutputStream(file); os = new FileOutputStream(file);
int bytesRead; int bytesRead;
int len = 8192; int len = 8192;
byte[] buffer = new byte[len]; byte[] buffer = new byte[len];
while ((bytesRead = ins.read(buffer, 0, len)) != -1) { while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
os.write(buffer, 0, bytesRead); os.write(buffer, 0, bytesRead);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
CloseUtil.close(os); CloseUtil.close(os);
CloseUtil.close(ins); CloseUtil.close(ins);
} }
return file; return file;
} }
/** /**
* 获取文件尺寸 * 获取文件尺寸
*/ */
public static FileVO getFileSize(MultipartFile file) { public static FileVO getFileSize(MultipartFile file) {
int width = 0; int width = 0;
int height = 0; int height = 0;
try { try {
// 图片对象 // 图片对象
BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
// 宽度 // 宽度
width = bufferedImage.getWidth(); width = bufferedImage.getWidth();
// 高度 // 高度
height = bufferedImage.getHeight(); height = bufferedImage.getHeight();
} catch (IOException ioException) { } catch (IOException ioException) {
log.error("获取文件尺寸异常###{}", ExceptionUtil.stacktraceToString(ioException)); log.error("获取文件尺寸异常###{}", ExceptionUtil.stacktraceToString(ioException));
} }
return new FileVO(height, width); return new FileVO(height, width);
} }
/** /**
* 获取文件尺寸 * 获取文件尺寸
*/ */
public static FileVO getFileSize(InputStream inputStream) { public static FileVO getFileSize(InputStream inputStream) {
int width = 0; int width = 0;
int height = 0; int height = 0;
try { try {
// 图片对象 // 图片对象
BufferedImage bufferedImage = ImageIO.read(inputStream); BufferedImage bufferedImage = ImageIO.read(inputStream);
// 宽度 // 宽度
width = bufferedImage.getWidth(); width = bufferedImage.getWidth();
// 高度 // 高度
height = bufferedImage.getHeight(); height = bufferedImage.getHeight();
} catch (IOException ioException) { } catch (IOException ioException) {
log.error("获取文件尺寸异常###{}", ExceptionUtil.stacktraceToString(ioException)); log.error("获取文件尺寸异常###{}", ExceptionUtil.stacktraceToString(ioException));
} }
return new FileVO(height, width); return new FileVO(height, width);
} }
/** /**
* 获取远程文件流 * 获取远程文件流
*/ */
public static InputStream getOriginFile(String path) { public static InputStream getOriginFile(String path) {
try { try {
//远程 //远程
URL url = new URL(path); URL url = new URL(path);
return url.openStream(); return url.openStream();
} catch (IOException ioException) { } catch (IOException ioException) {
log.error("获取源文件异常###{}###path##{}", ExceptionUtil.stacktraceToString(ioException), path); log.error("获取源文件异常###{}###path##{}", ExceptionUtil.stacktraceToString(ioException), path);
throw new BusinessException("get.file.failed"); throw new BusinessException("get.file.failed");
} }
} }
/** /**
* 将文件名解析成文件的上传路径 * 将文件名解析成文件的上传路径
*/ */
public static File upload(MultipartFile file, String filePath) { public static File upload(MultipartFile file, String filePath) {
Date date = new Date(); Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS");
String suffix = getExtensionName(file.getOriginalFilename()); String suffix = getExtensionName(file.getOriginalFilename());
String nowStr = format.format(date) + "-"; String nowStr = format.format(date) + "-";
try { try {
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
String fileSuffix = fileName.substring(fileName.lastIndexOf(".")); String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
String path = filePath + fileSuffix; String path = filePath + fileSuffix;
// getCanonicalFile 可解析正确各种路径 // getCanonicalFile 可解析正确各种路径
File dest = new File(path).getCanonicalFile(); File dest = new File(path).getCanonicalFile();
// 检测是否存在目录 // 检测是否存在目录
if (!dest.getParentFile().exists()) { if (!dest.getParentFile().exists()) {
if (!dest.getParentFile().mkdirs()) { if (!dest.getParentFile().mkdirs()) {
System.out.println("was not successful."); System.out.println("was not successful.");
} }
} }
// 文件写入 // 文件写入
file.transferTo(dest); file.transferTo(dest);
return dest; return dest;
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
return null; return null;
} }
/** /**
* 将文件名解析成文件的上传路径 * 将文件名解析成文件的上传路径
*/ */
public static File upload2(MultipartFile file, String filePath) { public static File upload2(MultipartFile file, String filePath) {
Date date = new Date(); Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS");
String suffix = getExtensionName(file.getOriginalFilename()); String suffix = getExtensionName(file.getOriginalFilename());
String nowStr = format.format(date) + "-"; String nowStr = format.format(date) + "-";
try { try {
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
String path = filePath + fileName; String path = filePath + fileName;
// getCanonicalFile 可解析正确各种路径 // getCanonicalFile 可解析正确各种路径
File dest = new File(path).getCanonicalFile(); File dest = new File(path).getCanonicalFile();
// 检测是否存在目录 // 检测是否存在目录
if (!dest.getParentFile().exists()) { if (!dest.getParentFile().exists()) {
if (!dest.getParentFile().mkdirs()) { if (!dest.getParentFile().mkdirs()) {
System.out.println("was not successful."); System.out.println("was not successful.");
} }
} }
// 文件写入 // 文件写入
file.transferTo(dest); file.transferTo(dest);
return dest; return dest;
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
return null; return null;
} }
/** /**
* 删除文件 * 删除文件
*/ */
public static boolean delete(String path) { public static boolean delete(String path) {
File file = new File(path); File file = new File(path);
if (file.exists()) { if (file.exists()) {
return file.delete(); return file.delete();
} }
return false; return false;
} }
/** /**
* 获取指定文件夹下所有文件,不含文件夹里的文件 * 获取指定文件夹下所有文件,不含文件夹里的文件
* *
* @param dirFilePath 文件夹路径 * @param dirFilePath 文件夹路径
* @return * @return
*/ */
public static List<File> getAllFile(String dirFilePath) { public static List<File> getAllFile(String dirFilePath) {
if (StrUtil.isBlank(dirFilePath)) { if (StrUtil.isBlank(dirFilePath)) {
return null; return null;
} }
return getAllFile(new File(dirFilePath)); return getAllFile(new File(dirFilePath));
} }
/** /**
* 获取指定文件夹下所有文件,不含文件夹里的文件 * 获取指定文件夹下所有文件,不含文件夹里的文件
* *
* @param dirFile 文件夹 * @param dirFile 文件夹
* @return * @return
*/ */
public static List<File> getAllFile(File dirFile) { public static List<File> getAllFile(File dirFile) {
// 如果文件夹不存在或着不是文件夹,则返回 null // 如果文件夹不存在或着不是文件夹,则返回 null
if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) { if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) {
return null; return null;
} }
File[] childrenFiles = dirFile.listFiles(); File[] childrenFiles = dirFile.listFiles();
if (Objects.isNull(childrenFiles) || childrenFiles.length == 0) { if (Objects.isNull(childrenFiles) || childrenFiles.length == 0) {
return null; return null;
} }
List<File> files = new ArrayList<>(); List<File> files = new ArrayList<>();
for (File childFile : childrenFiles) { for (File childFile : childrenFiles) {
// 如果是文件,直接添加到结果集合 // 如果是文件,直接添加到结果集合
if (childFile.isFile()) { if (childFile.isFile()) {
files.add(childFile); files.add(childFile);
} }
//以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里 //以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里
else { else {
// 如果是文件夹,则将其内部文件添加进结果集合 // 如果是文件夹,则将其内部文件添加进结果集合
List<File> cFiles = getAllFile(childFile); List<File> cFiles = getAllFile(childFile);
if (Objects.isNull(cFiles) || cFiles.isEmpty()) { if (Objects.isNull(cFiles) || cFiles.isEmpty()) {
continue; continue;
} }
files.addAll(cFiles); files.addAll(cFiles);
} }
} }
return files; return files;
} }
// 判断文件是否存在 // 判断文件是否存在
public static boolean isFileExists(String filePath) { public static boolean isFileExists(String filePath) {
File file = new File(filePath); File file = new File(filePath);
return file.exists() && file.isFile(); return file.exists() && file.isFile();
} }
// 根据路径获取文件 // 根据路径获取文件
public static File getFile(String filePath) { public static File getFile(String filePath) {
File file = new File(filePath); File file = new File(filePath);
if (file.exists() && file.isFile()) { if (file.exists() && file.isFile()) {
return file; return file;
} else { } else {
return null; return null;
} }
} }
} /**
* 将 FileItem 转换为 MultipartFile
* 用于 Spring Boot 3.x 兼容性CommonsMultipartFile 已移除)
*/
public static MultipartFile fileItemToMultipartFile(org.apache.commons.fileupload.FileItem fileItem) {
String fieldName = fileItem.getFieldName();
String fileName = fileItem.getName();
String contentType = fileItem.getContentType();
byte[] content = fileItem.get();
return new MockMultipartFile(fieldName, fileName, contentType, content);
}
}

View File

@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.ServletResponse; import jakarta.servlet.ServletResponse;
import java.io.PrintWriter; import java.io.PrintWriter;

View File

@@ -15,9 +15,9 @@ import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine; import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.mail.MessagingException; import jakarta.mail.MessagingException;
import javax.mail.internet.*; import jakarta.mail.internet.*;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

View File

@@ -3,11 +3,11 @@ package com.ai.da.common.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.ReadListener; import jakarta.servlet.ReadListener;
import javax.servlet.ServletInputStream; import jakarta.servlet.ServletInputStream;
import javax.servlet.ServletRequest; import jakarta.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import jakarta.servlet.http.HttpServletRequestWrapper;
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Enumeration; import java.util.Enumeration;

View File

@@ -3,10 +3,10 @@ package com.ai.da.common.utils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import javax.servlet.ServletOutputStream; import jakarta.servlet.ServletOutputStream;
import javax.servlet.WriteListener; import jakarta.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper; import jakarta.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;

View File

@@ -16,7 +16,7 @@ import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.Duration; import java.time.Duration;

View File

@@ -13,8 +13,8 @@ import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@@ -3,7 +3,7 @@ package com.ai.da.common.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;

View File

@@ -19,7 +19,7 @@ import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest; import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest; import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import java.io.*; import java.io.*;
import java.time.Duration; import java.time.Duration;
import java.util.*; import java.util.*;

View File

@@ -4,11 +4,10 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
import javax.websocket.*; import jakarta.websocket.*;
import javax.websocket.server.PathParam; import jakarta.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint; import jakarta.websocket.server.ServerEndpoint;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -58,7 +57,7 @@ public class NotificationConnection {
//收到了客户端消息执行的操作 //收到了客户端消息执行的操作
@OnMessage @OnMessage
public void onMessage(@RequestParam String text){ public void onMessage(String text){
Map<String, String> textMap = JSONObject.parseObject(text, Map.class); Map<String, String> textMap = JSONObject.parseObject(text, Map.class);
log.info("收到了一条来自 {} 的消息:{} sessionId{}", this.userId, textMap.get("text"), this.session.getId()); log.info("收到了一条来自 {} 的消息:{} sessionId{}", this.userId, textMap.get("text"), this.session.getId());
// return "已收到你的消息"; // return "已收到你的消息";

View File

@@ -1,5 +1,7 @@
package com.ai.da.common.websocket.config; package com.ai.da.common.websocket.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter; import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@@ -8,6 +10,8 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
* Configuration of WebSocket * Configuration of WebSocket
*/ */
@Configuration @Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnProperty(name = "websocket.enabled", havingValue = "true", matchIfMissing = true)
public class WebSocketConfig { public class WebSocketConfig {
@Bean @Bean
public ServerEndpointExporter serverEndpointExporter() { public ServerEndpointExporter serverEndpointExporter() {

View File

@@ -21,10 +21,10 @@ import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -19,7 +19,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -8,9 +8,9 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.Map; import java.util.Map;
@CrossOrigin @CrossOrigin

View File

@@ -8,9 +8,9 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.validation.Valid; import jakarta.validation.Valid;
@CrossOrigin @CrossOrigin
@RestController @RestController

View File

@@ -12,8 +12,8 @@ import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
/** /**

View File

@@ -23,10 +23,10 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Nullable; import jakarta.annotation.Nullable;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;

View File

@@ -11,8 +11,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
@CrossOrigin @CrossOrigin
@RestController @RestController

View File

@@ -13,11 +13,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;

View File

@@ -11,8 +11,8 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;

View File

@@ -16,9 +16,9 @@ import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import javax.validation.constraints.Pattern; import jakarta.validation.constraints.Pattern;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;

View File

@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.util.Collections; import java.util.Collections;
@Api(tags = "邮件模块") @Api(tags = "邮件模块")

View File

@@ -13,9 +13,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -1,45 +1,20 @@
package com.ai.da.controller; package com.ai.da.controller;
import com.ai.da.common.config.exception.BusinessException;
import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.response.PageBaseResponse;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.mapper.primary.entity.AccountExtend;
import com.ai.da.mapper.primary.entity.ChatMessage; import com.ai.da.mapper.primary.entity.ChatMessage;
import com.ai.da.mapper.primary.entity.TrialOrder;
import com.ai.da.model.dto.*; import com.ai.da.model.dto.*;
import com.ai.da.model.vo.AccountLoginVO;
import com.ai.da.model.vo.AccountPreLoginVO;
import com.ai.da.model.vo.BindEmailVO;
import com.ai.da.model.vo.PersonalHomepageVO;
import com.ai.da.service.AccountService;
import com.ai.da.service.LLMService; import com.ai.da.service.LLMService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Api(tags = "llm模块") @Api(tags = "llm模块")

View File

@@ -24,8 +24,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.io.File; import java.io.File;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.*;

View File

@@ -11,8 +11,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -11,8 +11,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
@CrossOrigin //开放前端的跨域访问 @CrossOrigin //开放前端的跨域访问
@Api(tags = "商品订单管理") @Api(tags = "商品订单管理")

View File

@@ -11,11 +11,11 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -15,8 +15,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
@Api(tags = "Portfolio模块") @Api(tags = "Portfolio模块")

View File

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

View File

@@ -15,9 +15,9 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
@Api(tags = "Project模块") @Api(tags = "Project模块")

View File

@@ -23,7 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View File

@@ -27,9 +27,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import javax.validation.constraints.Pattern; import jakarta.validation.constraints.Pattern;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;

View File

@@ -19,13 +19,12 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.ServletException; import jakarta.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

View File

@@ -10,7 +10,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

View File

@@ -12,8 +12,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
@Api(tags = "任务列表模块") @Api(tags = "任务列表模块")

View File

@@ -1,167 +1,167 @@
package com.ai.da.controller; package com.ai.da.controller;
import com.ai.da.common.constant.CommonConstant; import com.ai.da.common.constant.CommonConstant;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.common.utils.MinioUtil; import com.ai.da.common.utils.MinioUtil;
import com.ai.da.mapper.primary.entity.GoogleUser; import com.ai.da.mapper.primary.entity.GoogleUser;
import com.ai.da.model.dto.*; import com.ai.da.model.dto.*;
import com.ai.da.model.vo.AccountLoginVO; import com.ai.da.model.vo.AccountLoginVO;
import com.ai.da.model.vo.DesignCollectionVO; import com.ai.da.model.vo.DesignCollectionVO;
import com.ai.da.service.AccountService; import com.ai.da.service.AccountService;
import com.ai.da.service.DesignService; import com.ai.da.service.DesignService;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import jakarta.servlet.http.HttpSession;
import javax.validation.Valid; import jakarta.validation.Valid;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
@Api(tags = "Third Party Modules") @Api(tags = "Third Party Modules")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/third/party") @RequestMapping("/api/third/party")
public class ThirdPartyController { public class ThirdPartyController {
@Resource @Resource
private AccountService accountService; private AccountService accountService;
@Resource @Resource
private DesignService designService; private DesignService designService;
@Resource @Resource
private MinioUtil minioUtil; private MinioUtil minioUtil;
/*@ApiOperation(value = "Add user information") /*@ApiOperation(value = "Add user information")
@PostMapping("/addUser") @PostMapping("/addUser")
public Response<Boolean> addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) { public Response<Boolean> addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) {
return Response.success(accountService.addUser(accountAddDTO)); return Response.success(accountService.addUser(accountAddDTO));
}*/ }*/
@ApiOperation(value = "Edit user information") @ApiOperation(value = "Edit user information")
@PostMapping("/editUser") @PostMapping("/editUser")
public Response<Boolean> editUser(@RequestBody AccountEditDTO accountEditDTO) { public Response<Boolean> editUser(@RequestBody AccountEditDTO accountEditDTO) {
return Response.success(accountService.editUser(accountEditDTO)); return Response.success(accountService.editUser(accountEditDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "Add user information") @ApiOperation(value = "Add user information")
@PostMapping("/addTrialUser") @PostMapping("/addTrialUser")
public Response<Boolean> addTrialUser(@RequestBody AccountTrialDTO accountTrialDTO, HttpServletRequest request) { public Response<Boolean> addTrialUser(@RequestBody AccountTrialDTO accountTrialDTO, HttpServletRequest request) {
return Response.success(accountService.addTrialUser(accountTrialDTO, request)); return Response.success(accountService.addTrialUser(accountTrialDTO, request));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/addNoLoginRequired") @PostMapping("/addNoLoginRequired")
public Response<Boolean> addNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { public Response<Boolean> addNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) {
return Response.success(accountService.addNoLoginRequired(noLoginRequiredDTO)); return Response.success(accountService.addNoLoginRequired(noLoginRequiredDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/deleteNoLoginRequired") @PostMapping("/deleteNoLoginRequired")
public Response<Boolean> deleteNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { public Response<Boolean> deleteNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) {
return Response.success(accountService.deleteNoLoginRequired(noLoginRequiredDTO)); return Response.success(accountService.deleteNoLoginRequired(noLoginRequiredDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/existNoLoginRequired") @PostMapping("/existNoLoginRequired")
public Response<Boolean> existNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<Boolean> existNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.existNoLoginRequired(noLoginRequiredDTO, request)); return Response.success(accountService.existNoLoginRequired(noLoginRequiredDTO, request));
} }
@GetMapping("/your-secured-endpoint") @GetMapping("/your-secured-endpoint")
// @PreAuthorize("hasRole('ROLE_USER')") // @PreAuthorize("hasRole('ROLE_USER')")
public String securedEndpoint(HttpServletRequest request, @AuthenticationPrincipal PreAuthenticatedAuthenticationToken authenticationToken) { public String securedEndpoint(HttpServletRequest request, @AuthenticationPrincipal PreAuthenticatedAuthenticationToken authenticationToken) {
// 从请求属性中获取证书 // 从请求属性中获取证书
X509Certificate[] certificates = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); X509Certificate[] certificates = (X509Certificate[]) request.getAttribute("jakarta.servlet.request.X509Certificate");
if (certificates != null && certificates.length > 0) { if (certificates != null && certificates.length > 0) {
X509Certificate clientCertificate = certificates[0]; X509Certificate clientCertificate = certificates[0];
// 可以从 clientCertificate 中获取证书信息,例如主题、颁发者等 // 可以从 clientCertificate 中获取证书信息,例如主题、颁发者等
String subject = clientCertificate.getSubjectX500Principal().getName(); String subject = clientCertificate.getSubjectX500Principal().getName();
String issuer = clientCertificate.getIssuerX500Principal().getName(); String issuer = clientCertificate.getIssuerX500Principal().getName();
// 处理逻辑 // 处理逻辑
return "Secured Endpoint. Client Subject: " + subject + ", Issuer: " + issuer; return "Secured Endpoint. Client Subject: " + subject + ", Issuer: " + issuer;
} else { } else {
// 证书不存在或获取失败 // 证书不存在或获取失败
return "Failed to retrieve client certificate."; return "Failed to retrieve client certificate.";
} }
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/addNoLoginRequiredNew") @PostMapping("/addNoLoginRequiredNew")
public Response<String> addNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<String> addNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.addNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.addNoLoginRequiredNew(noLoginRequiredDTO, request));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/deleteNoLoginRequiredNew") @PostMapping("/deleteNoLoginRequiredNew")
public Response<Boolean> deleteNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<Boolean> deleteNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.deleteNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.deleteNoLoginRequiredNew(noLoginRequiredDTO, request));
} }
@Value("${redirect_url}") @Value("${redirect_url}")
private String REDIRECT_URL; private String REDIRECT_URL;
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @ApiOperation(value = "add No Login Required")
@PostMapping("/getRedirectUrl") @PostMapping("/getRedirectUrl")
public Response<String> getRedirectUrl() { public Response<String> getRedirectUrl() {
return Response.success(REDIRECT_URL); return Response.success(REDIRECT_URL);
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "updateNoLoginRequiredNew") @ApiOperation(value = "updateNoLoginRequiredNew")
@PostMapping("/updateNoLoginRequiredNew") @PostMapping("/updateNoLoginRequiredNew")
public Response<String> updateNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<String> updateNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.updateNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.updateNoLoginRequiredNew(noLoginRequiredDTO, request));
} }
@CrossOrigin @CrossOrigin
@GetMapping("/auth/google_callback") @GetMapping("/auth/google_callback")
public Response<String> googleCallback(@RequestParam("code") String code, HttpSession session) { public Response<String> googleCallback(@RequestParam("code") String code, HttpSession session) {
return Response.success(accountService.googleCallback(code, session)); return Response.success(accountService.googleCallback(code, session));
} }
@CrossOrigin @CrossOrigin
@GetMapping("/parseGoogleCredential") @GetMapping("/parseGoogleCredential")
public Response<AccountLoginVO> parseGoogleCredential(@RequestParam("credential") String credential, @RequestParam("type") Integer type) { public Response<AccountLoginVO> parseGoogleCredential(@RequestParam("credential") String credential, @RequestParam("type") Integer type) {
return Response.success(accountService.parseGoogleCredential(credential, type)); return Response.success(accountService.parseGoogleCredential(credential, type));
} }
@CrossOrigin @CrossOrigin
@GetMapping("/parseWeChatCode") @GetMapping("/parseWeChatCode")
public Response<AccountLoginVO> parseWeChatCode(@RequestParam("code") String code, @RequestParam("type") Integer type) { public Response<AccountLoginVO> parseWeChatCode(@RequestParam("code") String code, @RequestParam("type") Integer type) {
return Response.success(accountService.parseWeChatCode(code, type)); return Response.success(accountService.parseWeChatCode(code, type));
} }
@ApiOperation(value = "接收Design结果") @ApiOperation(value = "接收Design结果")
@PostMapping("/receiveDesignResults") @PostMapping("/receiveDesignResults")
@CrossOrigin @CrossOrigin
public Response<Boolean> receiveDesignResults(@Valid @RequestBody JSONObject responseObject) { public Response<Boolean> receiveDesignResults(@Valid @RequestBody JSONObject responseObject) {
return Response.success(designService.receiveDesignResults(responseObject)); return Response.success(designService.receiveDesignResults(responseObject));
} }
@ApiOperation(value = "接收Design入参") @ApiOperation(value = "接收Design入参")
@PostMapping("/receiveDesignParams") @PostMapping("/receiveDesignParams")
@CrossOrigin @CrossOrigin
public Response<Boolean> receiveDesignParams(@Valid @RequestBody ReceiveDesignParam receiveDesignParam) { public Response<Boolean> receiveDesignParams(@Valid @RequestBody ReceiveDesignParam receiveDesignParam) {
return Response.success(designService.receiveDesignParams(receiveDesignParam)); return Response.success(designService.receiveDesignParams(receiveDesignParam));
} }
@ApiOperation(value = "刷新minio预签名地址") @ApiOperation(value = "刷新minio预签名地址")
@GetMapping("/refreshMinioUrl") @GetMapping("/refreshMinioUrl")
public Response<String> refreshMinioUrl(@RequestParam("path") String path){ public Response<String> refreshMinioUrl(@RequestParam("path") String path){
return Response.success(minioUtil.getPreSignedUrl(path, CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); return Response.success(minioUtil.getPreSignedUrl(path, CommonConstant.MINIO_IMAGE_EXPIRE_TIME));
} }
} }

View File

@@ -17,8 +17,8 @@ import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import javax.annotation.Resource; import jakarta.annotation.Resource;
import javax.validation.Valid; import jakarta.validation.Valid;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;

View File

@@ -3,7 +3,6 @@ package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;

View File

@@ -67,6 +67,11 @@ public class SysFile implements Serializable {
*/ */
private Date updateDate; private Date updateDate;
/**
* 风格样式
*/
private String style;
public SysFile() { public SysFile() {
} }

View File

@@ -6,7 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@Data @Data
@ApiModel("绑定邮箱") @ApiModel("绑定邮箱")

View File

@@ -4,9 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("AccountEdit") @ApiModel("AccountEdit")
public class AccountEditDTO { public class AccountEditDTO {

View File

@@ -4,9 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("登入") @ApiModel("登入")
public class AccountLoginDTO { public class AccountLoginDTO {

View File

@@ -4,8 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("登出") @ApiModel("登出")

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@Data @Data
@ApiModel("预先登入") @ApiModel("预先登入")

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@Data @Data
@ApiModel("账户") @ApiModel("账户")

View File

@@ -5,8 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern;
import javax.validation.constraints.Pattern;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data

View File

@@ -2,7 +2,7 @@ package com.ai.da.model.dto;
import lombok.Data; import lombok.Data;
import javax.mail.internet.InternetAddress; import jakarta.mail.internet.InternetAddress;
@Data @Data
public class BasicEmailParamDTO { public class BasicEmailParamDTO {

View File

@@ -3,8 +3,8 @@ package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
/** /**
* @author aida * @author aida

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
/** /**
* @author aida * @author aida

View File

@@ -5,9 +5,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data @Data
@ApiModel("设计Collection颜色板 入参") @ApiModel("设计Collection颜色板 入参")

View File

@@ -4,8 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("删除文件") @ApiModel("删除文件")

View File

@@ -4,11 +4,10 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
@Data @Data

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("生成印花") @ApiModel("生成印花")

View File

@@ -4,9 +4,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.Size; import jakarta.validation.constraints.Size;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -1,12 +1,11 @@
package com.ai.da.model.dto; package com.ai.da.model.dto;
import com.ai.da.mapper.primary.entity.Gradient;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("设计Collection Sketch 入参") @ApiModel("设计Collection Sketch 入参")

View File

@@ -3,7 +3,7 @@ package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
public class CreateCouponDTO { public class CreateCouponDTO {

View File

@@ -5,10 +5,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -4,9 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;

View File

@@ -4,9 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("设计Collection element other 入参") @ApiModel("设计Collection element other 入参")
public class DesignCollectionElementDTO { public class DesignCollectionElementDTO {

View File

@@ -4,9 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data @Data
@ApiModel("Design like 入参") @ApiModel("Design like 入参")

View File

@@ -3,9 +3,9 @@ package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -3,8 +3,8 @@ package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;

View File

@@ -4,9 +4,9 @@ import com.ai.da.mapper.primary.entity.Gradient;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("Design dislike 入参") @ApiModel("Design dislike 入参")

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import jakarta.validation.constraints.Pattern;
import java.math.BigDecimal; import java.math.BigDecimal;
@Data @Data

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@Data @Data
@ApiModel("邮箱发送") @ApiModel("邮箱发送")

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("生成高级design 入参") @ApiModel("生成高级design 入参")

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("Generate like入参") @ApiModel("Generate like入参")

View File

@@ -4,9 +4,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import jakarta.validation.constraints.Pattern;
@ApiModel("修改imageToSketch提取出的sketch") @ApiModel("修改imageToSketch提取出的sketch")
@Data @Data

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("GenerateThroughImageTextDTO") @ApiModel("GenerateThroughImageTextDTO")

View File

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("根据rgb数组批量获取潘通rgb") @ApiModel("根据rgb数组批量获取潘通rgb")

View File

@@ -2,12 +2,9 @@ package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull;
import javax.validation.constraints.NotNull;
@Data @Data
@ApiModel("History删除") @ApiModel("History删除")

View File

@@ -6,8 +6,8 @@ import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@Data @Data
@ApiModel("History编辑") @ApiModel("History编辑")

View File

@@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.Size; import jakarta.validation.constraints.Size;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -4,9 +4,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.Size; import jakarta.validation.constraints.Size;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -4,9 +4,9 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;

Some files were not shown because too many files have changed in this diff Show More