First Commit

This commit is contained in:
Administrator
2025-05-12 12:04:42 +08:00
commit 6a5e13974c
1248 changed files with 366157 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
package quant.rich.emoney.entity.config;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import quant.rich.emoney.interfaces.ConfigInfo;
import quant.rich.emoney.interfaces.IConfig;
@Data
@Accessors(chain = true)
@Slf4j
@ConfigInfo(
field = "deviceInfo",
name = "设备信息设置",
initDefault = true,
managed = false)
public class DeviceInfoConfig implements IConfig<DeviceInfoConfig> {
private static final Random RANDOM = new Random();
@JsonView(IConfig.Views.Persistence.class)
List<DeviceInfo> deviceInfos;
public DeviceInfoConfig() {
deviceInfos = new ArrayList<>();
}
/**
* 获取随机设备信息
* @return
*/
public DeviceInfo getRandomDeviceInfo() {
if (deviceInfos.isEmpty()) return null;
return deviceInfos.get(RANDOM.nextInt(deviceInfos.size()));
}
@Data
@Accessors(chain=true)
@Slf4j
public static class DeviceInfo {
@JsonView(IConfig.Views.Persistence.class)
private String model;
private String brand;
private String product;
private String device;
@JsonView(IConfig.Views.Persistence.class)
private String deviceType;
private String versionRelease;
private String buildId;
private String buildNumber;
private String buildType;
private String buildTags;
public static final Pattern PATTERN = Pattern.compile("^(?<brand>.*?)/(?<product>.*?)/(?<device>.*?):(?<versionRelease>.*?)/(?<buildId>.*?)/(?<buildNumber>.*?):(?<buildType>.*?)/(?<buildTags>.*?)$");
private DeviceInfo() {
}
public DeviceInfo setFingerprint(String fingerprint) {
Matcher m = PATTERN.matcher(fingerprint);
if (!m.matches()) {
throw new IllegalArgumentException("Fingerprint not match the pattern: " + fingerprint);
}
this.setBrand(m.group("brand"));
this.setBuildId(m.group("buildId"));
this.setBuildNumber(m.group("buildNumber"));
this.setBuildTags(m.group("buildTags"));
this.setBuildType(m.group("buildType"));
this.setProduct(m.group("product"));
this.setVersionRelease(m.group("versionRelease"));
this.setDevice(m.group("device"));
return this;
}
public DeviceInfo setDeviceType(String deviceType) {
if (!"Mobile".equals(deviceType) && !"Pad".equals(deviceType)) {
throw new IllegalArgumentException("DeviceType must be \"Mobile\" or \"Pad\", but got \"" + deviceType + "\"");
}
this.deviceType = deviceType;
return this;
}
/**
* 根据指定 model、fingerprint 和 deviceType 返回 DeviceInfo
* @param model
* @param fingerprint
* @param deviceType
* @return
*/
public static DeviceInfo from(String model, String fingerprint, String deviceType) {
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.setModel(model);
deviceInfo.setFingerprint(fingerprint);
deviceInfo.setDeviceType(deviceType);
return deviceInfo;
}
public static DeviceInfo from(String model, String fingerprint) {
return from(model, fingerprint, "Mobile");
}
/**
* 从设备信息中还原 fingerprint
* @return
*/
@JsonView(IConfig.Views.Persistence.class)
public String getFingerprint() {
return String.format("%s/%s/%s:%s/%s/%s:%s/%s",
getBrand(), getProduct(), getDevice(), getVersionRelease(),
getBuildId(), getBuildNumber(), getBuildType(), getBuildTags()
);
}
public final String toString() {
return String.format("Model: %s, Fingerprint: %s",
getModel(), getFingerprint()
);
}
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
DeviceInfo other = (DeviceInfo)obj;
return hashCode() == other.hashCode();
}
public int hashCode() {
return Objects.hash(getModel(), getFingerprint());
}
}
}