mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-14 20:30:04 +08:00
添加充电桩程序版本工具类
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package com.jsowell.common.enums.ykc;
|
||||
|
||||
/**
|
||||
* 充电桩主板厂家
|
||||
*/
|
||||
public enum PileMainboardManufacturerEnum {
|
||||
UNKNOWN("unknown", "未知厂家"),
|
||||
;
|
||||
|
||||
private String value;
|
||||
private String label;
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setLabel(String label) {
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
PileMainboardManufacturerEnum(String value, String label) {
|
||||
this.value = value;
|
||||
this.label = label;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.jsowell.common.util;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.jsowell.common.enums.ykc.PileMainboardManufacturerEnum;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 充电桩程序版本工具类
|
||||
*/
|
||||
public final class PileProgramVersionUtils {
|
||||
private static final List<ManufacturerRule> MANUFACTURER_RULES = Lists.newArrayList();
|
||||
|
||||
static {
|
||||
// 后续厂家版本号特征明确后,在这里补充规则。
|
||||
// 示例:MANUFACTURER_RULES.add(ManufacturerRule.prefix(PileMainboardManufacturerEnum.UNKNOWN, "c6-30"));
|
||||
}
|
||||
|
||||
private PileProgramVersionUtils() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 标准化0x01登录帧中的程序版本,去掉ASCII补零。
|
||||
*
|
||||
* @param programVersion 程序版本
|
||||
* @return 标准化后的程序版本
|
||||
*/
|
||||
public static String normalize(String programVersion) {
|
||||
if (StringUtils.isBlank(programVersion)) {
|
||||
return null;
|
||||
}
|
||||
String normalized = programVersion.replace("\u0000", "").trim();
|
||||
return StringUtils.isBlank(normalized) ? null : normalized;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据程序版本识别主板厂家。
|
||||
*
|
||||
* @param programVersion 程序版本
|
||||
* @return 主板厂家
|
||||
*/
|
||||
public static PileMainboardManufacturerEnum getMainboardManufacturer(String programVersion) {
|
||||
String normalizedProgramVersion = normalize(programVersion);
|
||||
if (StringUtils.isBlank(normalizedProgramVersion)) {
|
||||
return PileMainboardManufacturerEnum.UNKNOWN;
|
||||
}
|
||||
|
||||
for (ManufacturerRule rule : MANUFACTURER_RULES) {
|
||||
if (rule.matches(normalizedProgramVersion)) {
|
||||
return rule.getManufacturer();
|
||||
}
|
||||
}
|
||||
return PileMainboardManufacturerEnum.UNKNOWN;
|
||||
}
|
||||
|
||||
public static String getMainboardManufacturerValue(String programVersion) {
|
||||
return getMainboardManufacturer(programVersion).getValue();
|
||||
}
|
||||
|
||||
public static String getMainboardManufacturerLabel(String programVersion) {
|
||||
return getMainboardManufacturer(programVersion).getLabel();
|
||||
}
|
||||
|
||||
public static boolean isManufacturer(String programVersion, PileMainboardManufacturerEnum manufacturer) {
|
||||
if (manufacturer == null) {
|
||||
return false;
|
||||
}
|
||||
return getMainboardManufacturer(programVersion) == manufacturer;
|
||||
}
|
||||
|
||||
private enum MatchType {
|
||||
EQUALS,
|
||||
PREFIX,
|
||||
CONTAINS,
|
||||
REGEX
|
||||
}
|
||||
|
||||
private static class ManufacturerRule {
|
||||
private final PileMainboardManufacturerEnum manufacturer;
|
||||
private final MatchType matchType;
|
||||
private final List<String> features;
|
||||
|
||||
private ManufacturerRule(PileMainboardManufacturerEnum manufacturer, MatchType matchType, List<String> features) {
|
||||
this.manufacturer = manufacturer;
|
||||
this.matchType = matchType;
|
||||
this.features = features;
|
||||
}
|
||||
|
||||
private static ManufacturerRule equals(PileMainboardManufacturerEnum manufacturer, String... features) {
|
||||
return new ManufacturerRule(manufacturer, MatchType.EQUALS, Lists.newArrayList(features));
|
||||
}
|
||||
|
||||
private static ManufacturerRule prefix(PileMainboardManufacturerEnum manufacturer, String... features) {
|
||||
return new ManufacturerRule(manufacturer, MatchType.PREFIX, Lists.newArrayList(features));
|
||||
}
|
||||
|
||||
private static ManufacturerRule contains(PileMainboardManufacturerEnum manufacturer, String... features) {
|
||||
return new ManufacturerRule(manufacturer, MatchType.CONTAINS, Lists.newArrayList(features));
|
||||
}
|
||||
|
||||
private static ManufacturerRule regex(PileMainboardManufacturerEnum manufacturer, String... features) {
|
||||
return new ManufacturerRule(manufacturer, MatchType.REGEX, Lists.newArrayList(features));
|
||||
}
|
||||
|
||||
private PileMainboardManufacturerEnum getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
private boolean matches(String programVersion) {
|
||||
if (manufacturer == null || matchType == null || StringUtils.isBlank(programVersion) || StringUtils.isEmpty(features)) {
|
||||
return false;
|
||||
}
|
||||
for (String feature : features) {
|
||||
if (matchesFeature(programVersion, feature)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean matchesFeature(String programVersion, String feature) {
|
||||
if (StringUtils.isBlank(feature)) {
|
||||
return false;
|
||||
}
|
||||
if (matchType == MatchType.REGEX) {
|
||||
return Pattern.compile(feature, Pattern.CASE_INSENSITIVE).matcher(programVersion).find();
|
||||
}
|
||||
|
||||
String lowerProgramVersion = programVersion.toLowerCase(Locale.ROOT);
|
||||
String lowerFeature = feature.toLowerCase(Locale.ROOT);
|
||||
if (matchType == MatchType.EQUALS) {
|
||||
return StringUtils.equals(lowerProgramVersion, lowerFeature);
|
||||
}
|
||||
if (matchType == MatchType.PREFIX) {
|
||||
return lowerProgramVersion.startsWith(lowerFeature);
|
||||
}
|
||||
if (matchType == MatchType.CONTAINS) {
|
||||
return lowerProgramVersion.contains(lowerFeature);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user