Pārlūkot izejas kodu

增加版本比较注解

woody 5 mēneši atpakaļ
vecāks
revīzija
881d8cf7ab

+ 41 - 0
framework-base/src/main/java/com/chelvc/framework/base/annotation/Version.java

@@ -0,0 +1,41 @@
+package com.chelvc.framework.base.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.chelvc.framework.common.model.Compare;
+import com.chelvc.framework.common.model.Terminal;
+
+/**
+ * 客户端版本号注解
+ *
+ * @author Woody
+ * @date 2024/9/8
+ */
+@Documented
+@Target({})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Version {
+    /**
+     * 获取版本号
+     *
+     * @return 版本号
+     */
+    String value();
+
+    /**
+     * 获取客户终端
+     *
+     * @return 客户终端
+     */
+    Terminal terminal();
+
+    /**
+     * 获取版本比较方式
+     *
+     * @return 比较方式
+     */
+    Compare compare() default Compare.EQ;
+}

+ 25 - 0
framework-base/src/main/java/com/chelvc/framework/base/annotation/Versions.java

@@ -0,0 +1,25 @@
+package com.chelvc.framework.base.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 多客户端版本号注解
+ *
+ * @author Woody
+ * @date 2024/9/8
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE, ElementType.METHOD})
+public @interface Versions {
+    /**
+     * 获取客户端版本号注解数组
+     *
+     * @return 客户端版本号注解数组
+     */
+    Version[] value();
+}

+ 28 - 0
framework-base/src/main/java/com/chelvc/framework/base/context/SessionContextHolder.java

@@ -8,11 +8,14 @@ import java.util.Deque;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.stream.Stream;
 import javax.servlet.ServletRequestEvent;
 import javax.servlet.ServletRequestListener;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.chelvc.framework.base.annotation.Versions;
+import com.chelvc.framework.common.model.Compare;
 import com.chelvc.framework.common.model.Platform;
 import com.chelvc.framework.common.model.Terminal;
 import com.chelvc.framework.common.model.Version;
@@ -461,6 +464,31 @@ public class SessionContextHolder implements ServletRequestListener {
         return false;
     }
 
+    /**
+     * 判断是否是指定版本
+     *
+     * @param versions 版本注解
+     * @return true/false
+     */
+    public static boolean isVersion(@NonNull Versions versions) {
+        return ObjectUtils.notEmpty(versions.value()) && Stream.of(versions.value()).anyMatch(version -> {
+            if (version.compare() == Compare.EQ) {
+                return isVersion(version.terminal(), version.value());
+            } else if (version.compare() == Compare.NE) {
+                return !isVersion(version.terminal(), version.value());
+            } else if (version.compare() == Compare.GT) {
+                return isAfterVersion(version.terminal(), version.value());
+            } else if (version.compare() == Compare.GE) {
+                return isAfterVersion(version.terminal(), version.value(), true);
+            } else if (version.compare() == Compare.LT) {
+                return isBeforeVersion(version.terminal(), version.value());
+            } else if (version.compare() == Compare.LE) {
+                return isBeforeVersion(version.terminal(), version.value(), true);
+            }
+            return false;
+        });
+    }
+
     /**
      * 判断是否是指定版本
      *