package com.zyy.user.api.helper;import com.zyy.framework.model.dto.result.ResultEnum;
import com.zyy.framework.model.exception.BusinessException;
import lombok.Builder;
import lombok.Data;import javax.validation.constraints.NotNull;/*** APP版本比较工具*/
public class AppVersionHelper {/*** 判断当前版本是否与目标版本相等** @param current 当前版本* @param target 目标版本* @return 返回比较情况*/public static boolean isEqual(String current, String target) {return current.equals(target);}/*** 判断当前版本是否大于目标版本** @param current 当前版本* @param target 目标版本* @return 返回比较情况*/public static boolean isGreaterThan(String current, String target) {Version currentVersion = buildVersion(current);Version targetVersion = buildVersion(target);return currentVersion.compareTo(targetVersion) > 0;}/*** 判断当前版本是否小于目标版本** @param current 当前版本* @param target 目标版本* @return 返回比较情况*/public static boolean isLessThan(String current, String target) {Version currentVersion = buildVersion(current);Version targetVersion = buildVersion(target);return currentVersion.compareTo(targetVersion) < 0;}/*** 判断当前版本是否大于等于目标版本** @param current 当前版本* @param target 目标版本* @return 返回比较情况*/public static boolean isGreaterThanOrEqual(String current, String target) {if (isEqual(current, target)) {return true;}Version currentVersion = buildVersion(current);Version targetVersion = buildVersion(target);return currentVersion.compareTo(targetVersion) > 0;}/*** 判断当前版本是否小于等于目标版本** @param current 当前版本* @param target 目标版本* @return 返回比较情况*/public static boolean isLessThanOrEqual(String current, String target) {if (isEqual(current, target)) {return true;}Version currentVersion = buildVersion(current);Version targetVersion = buildVersion(target);return currentVersion.compareTo(targetVersion) < 0;}public static Version buildVersion(String versionStr) {String[] split = versionStr.split("\\.");if (split.length != 3) {throw new BusinessException(ResultEnum.FAILURE.getCode(), "版本字符串格式错误");}return Version.builder().primaryVersion(Integer.parseInt(split[0])).minorVersion(Integer.parseInt(split[1])).repairedVersion(Integer.parseInt(split[2])).build();}@Data@Builderstatic class Version implements Comparable<Version> {/*** 主 版本号*/private int primaryVersion;/*** 次 版本号*/private int minorVersion;/*** 修复 版本号*/private int repairedVersion;@Overridepublic int compareTo(@NotNull Version version) {if (primaryVersion > version.primaryVersion) {return 1;} else if (primaryVersion == version.primaryVersion) {if (minorVersion > version.minorVersion) {return 1;} else if (minorVersion == version.minorVersion) {return Integer.compare(repairedVersion, version.repairedVersion);} else {return -1;}} else {return -1;}}}
}
测试:
public static void main(String[] args) {boolean greaterThan = isGreaterThan("1.1.1", "1.1.2");boolean lessThanOrEqual = isLessThanOrEqual("1.1.1", "1.1.2");System.out.println("greaterThan :"+greaterThan+",lessThanOrEqual :"+lessThanOrEqual);}
测试结果:
greaterThan :false,lessThanOrEqual :true