liusuyi
2026-05-18 b5cd784d0cde5b7c82ea78aef4ac0e5a161d8c5d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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);
    }
}