/**
* 通用接口类
*/
public interface IEnum {
/**
* 获取code
* @return
*/
String getCode();
/**
* 获取描述
* @return
*/
String getDesc();
}
public enum EnumBusType implements IEnum {
PAY("01", "付款"),
REFUND("02", "退款") ;
private String code;
private String desc;
EnumBusType (String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
/**
* 枚举工具类
*/
public class EnumUtils {
private static Logger logger = LoggerFactory.getLogger(EnumUtils.class);
private static volatile Boolean init = true;
public static ConcurrentHashMap < String, List < EnumObject >> enumMap = new ConcurrentHashMap < > ();
public static < T extends IStatusEnum > T getEnumByCode(String code, Class << ? extends IStatusEnum > enumClass) {
T[] enums = (T[]) enumClass.getEnumConstants();
for (T en: enums) {
if (en.getCode().equals(code)) {
return en;
}
}
return null;
}
public static < T extends IEnum > T getEnumByDesc(String desc, Class << ? extends IEnum > enumClass) {
T[] enums = (T[]) enumClass.getEnumConstants();
for (T en: enums) {
if (en.getDesc().equals(desc)) {
return en;
}
}
return null;
}
/**
* 以list的方式返回所code
*/
public static List < EnumObject > getEnumList(String enumClassName) {
if (init) {
logger.info("初始化");
synchronized(init) {
if (init) {
Set < Class < ? >> classSet = ClassUtil.scanPackageBySuper("com.common.enums", IEnum.class);
classSet.forEach(clazz - > {
if (null != enumMap.get(clazz.getSimpleName())) {
logger.warn("枚举类重复:{}", clazz.getSimpleName());
}
IEnum[] enums = (IEnum[]) clazz.getEnumConstants();
List < EnumObject > enumObjects = new ArrayList < > ();
for (IEnum IEnum: enums) {
EnumObject enumObject = new EnumObject();
enumObject.setCode(IEnum.getCode());
enumObject.setDesc(IEnum.getDesc());
enumObjects.add(enumObject);
}
logger.info("添加枚举类:{}", clazz.getSimpleName());
enumMap.put(clazz.getSimpleName(), enumObjects);
});
}
init = false;
}
}
logger.info("查询枚举类:{}-{}", enumClassName, enumMap.get(enumClassName));
return enumMap.get(enumClassName);
}
public static String getEnumDescByCode(String code, Class << ? extends IEnum > enumClass) {
if (null == code) {
return "";
}
IEnum enums = getEnumByCode(code, enumClass);
if (null == enums) {
return "";
}
return enums.getDesc();
}
public static String getEnumCodeByDesc(String desc, Class << ? extends IEnum > enumClass) {
if (null == desc) {
return "";
}
IEnum enums = getEnumByDesc(desc, enumClass);
if (null == enums) {
return "";
}
return enums.getCode();
}
public static String getEnumDescByCodeWithDefault(String code, Class << ? extends IEnum > enumClass, String defaultVal) {
String result = getEnumDescByCode(code, enumClass);
if (StringUtils.isEmpty(result)) {
return defaultVal;
}
return result;
}
public static String getEnumCodeByDescWithDefault(String desc, Class << ? extends IEnum > enumClass, String defaultVal) {
String result = getEnumCodeByDesc(desc, enumClass);
if (StringUtils.isEmpty(result)) {
return defaultVal;
}
return result;
}
}
/**
* 查询枚举
*/
@RequestMapping(value = "/queryEnumByName")
@ResponseBody
public Result queryEnumByName(@RequestBody EnumReq req) {
return Result.ok(EnumUtils.getEnumList(req.getEnumName()));
}