package com.ruoyi.common.utils; import com.ruoyi.common.enums.BaseEnum; import java.util.*; import java.util.stream.Collectors; /** * 通用枚举工具类 * 适用于所有实现 BaseEnum 接口的枚举 * * @author Bu */ public class EnumUtil { /** * 根据 code 获取枚举实例 */ public static & BaseEnum> E fromCode(Class enumClass, int code) { for (E e : enumClass.getEnumConstants()) { if (Integer.parseInt(String.valueOf(e.getCode())) == code) { return e; } } throw new IllegalArgumentException("未知的 code: " + code + " 对于枚举 " + enumClass.getSimpleName()); } public static & BaseEnum> E fromCodeHasNull(Class enumClass, int code) { for (E e : enumClass.getEnumConstants()) { if (Integer.parseInt(String.valueOf(e.getCode())) == code) { return e; } } return null; } public static & BaseEnum> E fromCodeHasDefault(Class enumClass, int code,E defaultE) { for (E e : enumClass.getEnumConstants()) { if (Integer.parseInt(String.valueOf(e.getCode())) == code) { return e; } } return defaultE; } /** * 根据 value 获取枚举实例 */ public static & BaseEnum> E fromValue(Class enumClass, String value) { for (E e : enumClass.getEnumConstants()) { if (Objects.equals(e.getValue(), value)) { return e; } } throw new IllegalArgumentException("未知的 value: " + value + " 对于枚举 " + enumClass.getSimpleName()); } /** * 获取所有枚举项列表 */ public static & BaseEnum> List listAll(Class enumClass) { return Arrays.asList(enumClass.getEnumConstants()); } /** * 转为 List(适合返回给前端) * 格式: [{ "code": 1, "value": "绞线" }, ...] */ public static & BaseEnum> List> toList(Class enumClass) { return Arrays.stream(enumClass.getEnumConstants()) .map(e -> { Map map = new HashMap<>(); map.put("key", e.getCode().toString()); map.put("value", e.getValue()); return map; }) .collect(Collectors.toList()); } // /** // * 转为 Map // * 格式: { 1: "绞线", 0: "拉丝" } // */ // public static & BaseEnum> Map toMap(Class enumClass) { // return Arrays.stream(enumClass.getEnumConstants()) // .collect(Collectors.toMap((BaseEnum::getCode, BaseEnum::getValue)); // } // // // public static void main(String[] args) { // // ✅ 1. 根据 code 获取枚举 // StockRecordTypeEnum status = EnumUtil.fromCode(StockRecordTypeEnum.class, 1); // System.out.println(status.getValue()); // 绞线 // // // ✅ 2. 转成 list (适合前端) // System.out.println(EnumUtil.toList(StockRecordTypeEnum.class)); // // 输出: [{code=1, value=绞线}, {code=0, value=拉丝}] // // // ✅ 3. 转成 map // System.out.println(EnumUtil.toMap(StockRecordTypeEnum.class)); // // 输出: {1=绞线, 0=拉丝} // } }