From 6acc6587c10fd9784ab99978bb98fe48ddbc1619 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Fri, 12 Apr 2024 11:06:12 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/pom.xml | 1 + ruoyi-common/ruoyi-common-bom/pom.xml | 7 ++ ruoyi-common/ruoyi-common-shortlink/pom.xml | 37 ++++++++ .../common/shortlink/enums/ValidityType.java | 50 +++++++++++ .../properties/ShortLinkProperties.java | 25 ++++++ .../shortlink/utils/ShortLinkUtils.java | 88 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + 7 files changed, 209 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-shortlink/pom.xml create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java create mode 100644 ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 45493d3e9..3e49ee6c9 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -23,6 +23,7 @@ ruoyi-common-oss ruoyi-common-ratelimiter ruoyi-common-redis + ruoyi-common-shortlink ruoyi-common-satoken ruoyi-common-security ruoyi-common-sms diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 4a2dc1ceb..35514f768 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -96,6 +96,13 @@ ${revision} + + + org.dromara + ruoyi-common-shortlink + ${revision} + + org.dromara diff --git a/ruoyi-common/ruoyi-common-shortlink/pom.xml b/ruoyi-common/ruoyi-common-shortlink/pom.xml new file mode 100644 index 000000000..0cfac4e94 --- /dev/null +++ b/ruoyi-common/ruoyi-common-shortlink/pom.xml @@ -0,0 +1,37 @@ + + + + org.dromara + ruoyi-common + ${revision} + + 4.0.0 + + ruoyi-common-shortlink + + + ruoyi-common-shortlink 短链接模块 + + + + + + org.dromara + ruoyi-common-core + + + + org.dromara + ruoyi-common-redis + + + + org.dromara + ruoyi-common-mybatis + + + + + diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java new file mode 100644 index 000000000..35eb45845 --- /dev/null +++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/enums/ValidityType.java @@ -0,0 +1,50 @@ +package org.dromara.common.shortlink.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 有效期 + * + * @author AprilWind + */ +@Getter +@AllArgsConstructor +public enum ValidityType { + + /** + * 三分钟 + */ + THREE_MINUTES(3 * 60L), + + /** + * 一个小时 + */ + ONE_HOUR(60 * 60L), + + /** + * 表示一天(24小时) + */ + ONE_DAY(24 * 60 * 60L), + + /** + * 表示三天 + */ + THREE_DAYS(3 * 24 * 60 * 60L), + + /** + * 表示七天(一周) + */ + SEVEN_DAYS(7 * 24 * 60 * 60L), + + /** + * 表示三十天(一个月) + */ + THIRTY_DAYS(30 * 24 * 60 * 60L); + + /** + * 有效期(单位:秒) + */ + private final Long validityType; + +} diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java new file mode 100644 index 000000000..0d96f886a --- /dev/null +++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/properties/ShortLinkProperties.java @@ -0,0 +1,25 @@ +package org.dromara.common.shortlink.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 短链接 配置属性 + * + * @author AprilWind + */ +@Data +@ConfigurationProperties(prefix = "shortlink") +public class ShortLinkProperties { + + /** + * 短链接主机名或域名 + */ + private String host; + + /** + * 错误页面的主机名或域名 + */ + private String erroHost; + +} diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java new file mode 100644 index 000000000..dd1e0a289 --- /dev/null +++ b/ruoyi-common/ruoyi-common-shortlink/src/main/java/org/dromara/common/shortlink/utils/ShortLinkUtils.java @@ -0,0 +1,88 @@ +package org.dromara.common.shortlink.utils; + +import cn.hutool.core.lang.Validator; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.dromara.common.core.constant.GlobalConstants; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.common.shortlink.enums.ValidityType; +import org.dromara.common.shortlink.properties.ShortLinkProperties; + +import java.time.Duration; + +/** + * 短链接生成工具类 + * + * @author AprilWind + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ShortLinkUtils { + + private static final IdentifierGenerator IDENTIFIER_GENERATOR = SpringUtils.getBean(IdentifierGenerator.class); + private static final ShortLinkProperties shortLinkProperties = SpringUtils.getBean(ShortLinkProperties.class); + + /** + * 生成带有短链接主机名或域名的完整短链接 + * + * @param longUrl 完整的长链接 + * @param validityType 有效期类型枚举 + * @return 带有短链接主机名或域名的完整短链接 + */ + public static String generateShortUrlHost(String longUrl, ValidityType validityType) { + String url = generateShortUrl(longUrl, validityType); + return shortLinkProperties.getHost() + url; + } + + /** + * 生成短链接并将长链接存储到缓存中 + * + * @param longUrl 完整的长链接 + * @param validityType 有效期类型枚举 + * @return 生成的短链接标识符 + */ + public static String generateShortUrl(String longUrl, ValidityType validityType) { + // 使用标识符生成器生成短链接 + String shortUrl = IDENTIFIER_GENERATOR.nextId(null).toString(); + return generateShortUrl(shortUrl, longUrl, validityType); + } + + /** + * 生成指定短链接并将长链接存储到缓存中 + * + * @param shortUrl 指定的短链接标识符 + * @param longUrl 完整的长链接 + * @param validityType 有效期类型枚举 + * @return 生成的指定短链接标识符 + */ + public static String generateShortUrl(String shortUrl, String longUrl, ValidityType validityType) { + Validator.validateUrl(longUrl, "请输入有效的url"); + RedisUtils.setCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl, longUrl, Duration.ofSeconds(validityType.getValidityType())); + return shortUrl; + } + + /** + * 根据短链接获取对应的完整长链接,如果找不到长链接则返回错误链接 + * + * @param shortUrl 短链接标识符 + * @return 对应的完整长链接,如果未找到则返回错误链接 + */ + public static String getLongLink(String shortUrl) { + return getLongLink(shortUrl, shortLinkProperties.getErroHost()); + } + + /** + * 根据短链接获取对应的完整长链接,如果找不到长链接则返回指定的错误链接 + * + * @param shortUrl 短链接标识符 + * @param errUrl 错误链接 + * @return 对应的完整长链接,如果未找到则返回错误链接 + */ + public static String getLongLink(String shortUrl, String errUrl) { + String longLink = RedisUtils.getCacheObject(GlobalConstants.SHORT_LINK_KEY + shortUrl); + return StringUtils.isNotEmpty(longLink) ? longLink : errUrl; + } + +} diff --git a/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..aa57e7f93 --- /dev/null +++ b/ruoyi-common/ruoyi-common-shortlink/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.common.shortlink.properties.ShortLinkProperties