|
|
@@ -0,0 +1,75 @@
|
|
|
+package com.mes.util;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 客户端版本号比较,格式 0.0.0 / 0.0.1。
|
|
|
+ * 没有点的旧数字(如 1)按 0.0.1 处理。
|
|
|
+ */
|
|
|
+public final class ClientVersionUtils {
|
|
|
+
|
|
|
+ private ClientVersionUtils() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public static int compare(String left, String right) {
|
|
|
+ int[] a = parse(left);
|
|
|
+ int[] b = parse(right);
|
|
|
+ int n = Math.max(a.length, b.length);
|
|
|
+ for (int i = 0; i < n; i++) {
|
|
|
+ int va = i < a.length ? a[i] : 0;
|
|
|
+ int vb = i < b.length ? b[i] : 0;
|
|
|
+ if (va != vb) {
|
|
|
+ return va < vb ? -1 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean isNewer(String latest, String current) {
|
|
|
+ return compare(latest, current) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String max(String left, String right) {
|
|
|
+ if (isBlank(left)) {
|
|
|
+ return normalize(right);
|
|
|
+ }
|
|
|
+ if (isBlank(right)) {
|
|
|
+ return normalize(left);
|
|
|
+ }
|
|
|
+ return compare(left, right) >= 0 ? normalize(left) : normalize(right);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String normalize(String version) {
|
|
|
+ if (isBlank(version)) {
|
|
|
+ return "0.0.0";
|
|
|
+ }
|
|
|
+ int[] parts = parse(version);
|
|
|
+ return parts[0] + "." + parts[1] + "." + parts[2];
|
|
|
+ }
|
|
|
+
|
|
|
+ private static int[] parse(String version) {
|
|
|
+ int[] result = new int[] {0, 0, 0};
|
|
|
+ if (isBlank(version)) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ String[] parts = version.trim().split("\\.");
|
|
|
+ if (parts.length == 1) {
|
|
|
+ result[2] = parseInt(parts[0]);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < parts.length && i < 3; i++) {
|
|
|
+ result[i] = parseInt(parts[i]);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static int parseInt(String value) {
|
|
|
+ try {
|
|
|
+ return Integer.parseInt(value.trim());
|
|
|
+ } catch (Exception e) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static boolean isBlank(String value) {
|
|
|
+ return value == null || value.trim().length() == 0;
|
|
|
+ }
|
|
|
+}
|