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<Integer, HbSdkErrorCodeEnum> 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);
|
}
|
}
|