package com.ard.work.sdk.hb.lib; import com.ard.common.core.utils.StringUtils; import java.util.HashMap; import java.util.Map; /** * 汉邦SDK错误码枚举 * 包含所有官方定义的错误码,提供便捷的查询和转换方法 * 刘苏义 * 2024/3/7 10:50:52 * 完善:补充全量错误码、优化查询性能、增加注释说明 */ public enum HbSdkErrorCodeEnum { // ===================== 基础错误码(0 ~ -59)===================== HB_NET_NOERROR(0, "没有错误"), HB_NET_PASSWORD_ERROR(-1, "用户名密码错误"), HB_NET_NOENOUGHPRI(-2, "权限不足"), HB_NET_NOINIT(-3, "没有初始化"), HB_NET_CHANNEL_ERROR(-4, "通道号错误"), HB_NET_OVER_MAXLINK(-5, "连接到DVR的客户端个数超过最大"), HB_NET_VERSIONNOMATCH(-6, "版本不匹配"), HB_NET_NETWORK_FAIL_CONNECT(-7, "连接服务器失败"), HB_NET_NETWORK_SEND_ERROR(-8, "向服务器发送失败"), HB_NET_NETWORK_RECV_ERROR(-9, "从服务器接收数据失败"), HB_NET_NETWORK_RECV_TIMEOUT(-10, "从服务器接收数据超时"), HB_NET_NETWORK_ERRORDATA(-11, "传送的数据有误"), HB_NET_ORDER_ERROR(-12, "调用次序错误"), HB_NET_OPERNOPERMIT(-13, "无此权限"), HB_NET_COMMANDTIMEOUT(-14, "DVR命令执行超时"), HB_NET_ERRORSERIALPORT(-15, "串口号错误"), HB_NET_ERRORALARMPORT(-16, "报警端口错误"), HB_NET_PARAMETER_ERROR(-17, "参数错误"), HB_NET_CHAN_EXCEPTION(-18, "服务器通道处于错误状态"), HB_NET_NODISK(-19, "没有硬盘"), HB_NET_ERRORDISKNUM(-20, "硬盘号错误"), HB_NET_DISK_FULL(-21, "服务器硬盘满"), HB_NET_DISK_ERROR(-22, "服务器硬盘出错"), HB_NET_NOSUPPORT(-23, "服务器不支持"), HB_NET_BUSY(-24, "服务器忙"), HB_NET_MODIFY_FAIL(-25, "服务器修改不成功"), HB_NET_PASSWORD_FORMAT_ERROR(-26, "密码输入格式不正确"), HB_NET_DISK_FORMATING(-27, "硬盘正在格式化,不能启动操作"), HB_NET_DVRNORESOURCE(-28, "DVR资源不足"), HB_NET_DVROPRATEFAILED(-29, "DVR操作失败"), HB_NET_OPENHOSTSOUND_FAIL(-30, "打开PC声音失败"), HB_NET_DVRVOICEOPENED(-31, "服务器语音对讲被占用"), HB_NET_TIMEINPUTERROR(-32, "时间输入不正确"), HB_NET_NOSPECFILE(-33, "回放时服务器没有指定的文件"), HB_NET_CREATEFILE_ERROR(-34, "创建文件出错"), HB_NET_FILEOPENFAIL(-35, "打开文件出错"), HB_NET_OPERNOTFINISH(-36, "上次的操作还没有完成"), HB_NET_GETPLAYTIMEFAIL(-37, "获取当前播放的时间出错"), HB_NET_PLAYFAIL(-38, "播放出错"), HB_NET_FILEFORMAT_ERROR(-39, "文件格式不正确"), HB_NET_DIR_ERROR(-40, "路径错误"), HB_NET_ALLOC_RESOUCE_ERROR(-41, "资源分配错误"), HB_NET_AUDIO_MODE_ERROR(-42, "声卡模式错误"), HB_NET_NOENOUGH_BUF(-43, "缓冲区太小"), HB_NET_CREATESOCKET_ERROR(-44, "创建SOCKET出错"), HB_NET_SETSOCKET_ERROR(-45, "设置SOCKET出错"), HB_NET_MAX_NUM(-46, "个数达到最大"), HB_NET_USERNOTEXIST(-47, "用户不存在"), HB_NET_WRITEFLASHERROR(-48, "写FLASH出错"), HB_NET_UPGRADEFAIL(-49, "DVR升级失败"), HB_NET_CARDHAVEINIT(-50, "解码卡已经初始化过"), HB_NET_PLAYERFAILED(-51, "播放器中错误"), HB_NET_MAX_USERNUM(-52, "用户数达到最大"), HB_NET_GETLOCALIPANDMACFAIL(-53, "获得客户端的IP地址或物理地址失败"), HB_NET_NOENCODEING(-54, "该通道没有编码"), HB_NET_IPMISMATCH(-55, "IP地址不匹配"), HB_NET_MACMISMATCH(-56, "MAC地址不匹配"), HB_NET_UPGRADELANGMISMATCH(-57, "升级文件语言不匹配"), HB_NET_USERISALIVE(-58, "用户已登陆"), HB_NET_UNKNOWNERROR(-59, "未知错误"), // ===================== 扩展错误码(100+)===================== HB_NET_IPERR(-101, "IP地址不匹配"), HB_NET_MACERR(-102, "MAC地址不匹配"), HB_NET_PSWERR(-103, "密码不匹配"), HB_NET_USERERR(-104, "用户名不匹配"), HB_NET_USERISFULL(-105, "主机用户满"), NO_PERMISSION(0xf0, "用户没有权限"), // 16进制转10进制为240 NET_ERR_TRANS_CHAN_START(1101, "透明通道已打开,当前操作无法完成"); /** * 错误码 */ private final Integer code; /** * 错误描述 */ private final String desc; // 静态缓存,提升查询性能(避免每次遍历枚举) private static final Map CODE_MAP = new HashMap<>(); // 静态初始化缓存 static { for (HbSdkErrorCodeEnum errorCode : HbSdkErrorCodeEnum.values()) { CODE_MAP.put(errorCode.getCode(), errorCode); } } /** * 构造方法 * @param code 错误码 * @param desc 错误描述 */ HbSdkErrorCodeEnum(Integer code, String desc) { this.code = code; this.desc = desc; } // ========== 基础getter方法 ========== public Integer getCode() { return code; } public String getDesc() { return desc; } // ========== 核心工具方法 ========== /** * 根据错误码获取枚举对象(高性能版) * @param code 错误码 * @return 对应的枚举对象,无匹配返回null */ public static HbSdkErrorCodeEnum getByCode(Integer code) { if (code == null) { return null; } return CODE_MAP.get(code); } /** * 根据错误码获取错误描述(带默认值) * @param code 错误码 * @return 错误描述,无匹配返回友好提示 */ public static String getDescByCode(Integer code) { if (code == null) { return "错误码为空"; } HbSdkErrorCodeEnum errorCode = CODE_MAP.get(code); if (errorCode != null) { return errorCode.getDesc(); } return String.format("未知错误码:%d,请联系管理员确认", code); } /** * 检查错误码是否为成功状态 * @param code 错误码 * @return true=成功,false=失败 */ public static boolean isSuccess(Integer code) { return HB_NET_NOERROR.getCode().equals(code); } /** * 检查错误码是否为网络相关错误 * @param code 错误码 * @return true=网络错误,false=非网络错误 */ public static boolean isNetworkError(Integer code) { if (code == null) { return false; } return code >= -11 && code <= -7; // 覆盖-7到-11的网络错误码范围 } /** * 获取错误码+描述的组合信息(便于日志打印) * @param code 错误码 * @return 组合字符串,如:"-7: 连接服务器失败" */ public static String getCodeAndDesc(Integer code) { if (code == null) { return "错误码:null,描述:错误码为空"; } return String.format("错误码:%d,描述:%s", code, getDescByCode(code)); } /** * 重写toString,返回更友好的错误信息 */ @Override public String toString() { return String.format("[%d] %s", this.code, this.desc); } }