package jnpf.base.model.systemconfig;
|
|
import lombok.Data;
|
|
import java.util.LinkedHashMap;
|
import java.util.Map;
|
|
@Data
|
public class UserFieldConfig {
|
private static final String[] FORM_FIELDS = {"account", "realName", "jobNumber", "positionId", "gender", "email",
|
"mobilePhone", "ranks", "sortCode", "enabledMark", "description", "headIcon", "nation", "nativePlace",
|
"certificatesType", "entryDate", "certificatesNumber", "education", "birthday", "telePhone", "landline",
|
"urgentContacts", "urgentTelePhone", "postalAddress", "roleId"};
|
private static final String[] LIST_FIELDS = {"account", "realName", "jobNumber", "gender", "mobilePhone",
|
"position", "creatorTime", "lastModifyTime", "sortCode", "enabledMark", "disableTime"};
|
|
private Map<String, FieldRule> form;
|
private Map<String, FieldRule> list;
|
|
public String toCompactString() {
|
return encode(form, FORM_FIELDS) + ":" + encode(list, LIST_FIELDS);
|
}
|
|
public static UserFieldConfig fromCompactString(String value) {
|
UserFieldConfig config = new UserFieldConfig();
|
if (value == null || value.isEmpty()) return config;
|
String[] parts = value.split(":", -1);
|
if (parts.length != 2 && parts.length != 3) throw new IllegalArgumentException("用户字段配置格式无效");
|
String formPart = parts[0];
|
if (formPart.length() == FORM_FIELDS.length - 1) formPart += '1';
|
config.setForm(decode(formPart, FORM_FIELDS));
|
String listPart = parts[parts.length - 1];
|
if (listPart.length() == LIST_FIELDS.length - 1) listPart += '1';
|
config.setList(decode(listPart, LIST_FIELDS));
|
return config;
|
}
|
|
private static String encode(Map<String, FieldRule> rules, String[] fields) {
|
StringBuilder encoded = new StringBuilder(fields.length);
|
for (String field : fields) {
|
FieldRule rule = rules.get(field);
|
encoded.append(!rule.isVisible() ? '0' : rule.isRequired() ? '2' : '1');
|
}
|
return encoded.toString();
|
}
|
|
private static Map<String, FieldRule> decode(String encoded, String[] fields) {
|
if (encoded.length() != fields.length) throw new IllegalArgumentException("用户字段配置长度无效");
|
Map<String, FieldRule> rules = new LinkedHashMap<>();
|
for (int i = 0; i < fields.length; i++) {
|
char code = encoded.charAt(i);
|
if (code != '0' && code != '1' && code != '2') throw new IllegalArgumentException("用户字段配置内容无效");
|
FieldRule rule = new FieldRule();
|
rule.setVisible(code != '0');
|
rule.setRequired(code == '2');
|
rules.put(fields[i], rule);
|
}
|
return rules;
|
}
|
|
@Data
|
public static class FieldRule {
|
private boolean visible;
|
private boolean required;
|
}
|
}
|