JLChen
2021-11-30 efad979b6fae76fb37a4de7e94e6bac0a85cb72c
HDL_ON/DAL/Server/IMessageCommon.cs
@@ -9,7 +9,7 @@
    /// </summary>
    public class IMessageCommon
    {
        /// <summary>
        /// 接口类的返回信息
        /// </summary>
@@ -30,15 +30,21 @@
                return m_Current;
            }
        }
        /// <summary>
        /// 是否在获取token
        /// </summary>
        public bool isGetingToken;
        /// <summary>
        /// 无视错误(访问云端时,此操作将不会弹出错误)
        /// </summary>
        public bool IgnoreError = false;
        /// <summary>
        /// 全部信息
        /// </summary>
        private Dictionary<string, Dictionary<string, int>> dicMsg = null;
        ///// <summary>
        ///// 全部信息
        ///// </summary>
        //private Dictionary<string, Dictionary<string, int>> dicMsg = null;
        /// <summary>
        /// 通用错误码
@@ -51,140 +57,151 @@
        /// </summary>
        public void InitAllMsg()
        {
            dicMsg = new Dictionary<string, Dictionary<string, int>>();
            //dicMsg = new Dictionary<string, Dictionary<string, int>>();
            #region 共通错误码
            stateCodeDic = new Dictionary<string, int>();
            //与服务器通讯失败
            stateCodeDic["NETWORK_ERROR"] = HDL_ON.StringId.FailedRequestServer;
            stateCodeDic["NETWORK_ERROR"] = StringId.FailedRequestServer;
            //数据异常
            stateCodeDic["DATA_EXCEPTION"] = HDL_ON.StringId.DataExceptionPleaseTryAgain;
            #region 基础服务 新错误码
            stateCodeDic["DATA_EXCEPTION"] = StringId.DataExceptionPleaseTryAgain;
            //与服务器通讯失败
            stateCodeDic[StateCode.NETWORK_ERROR] = StringId.FailedRequestServer;
            //数据异常
            stateCodeDic[StateCode.DATA_EXCEPTION] = StringId.DataExceptionPleaseTryAgain;
            #region 基础服务 新错误码 2020-12-07
            //系统繁忙~请稍后再试~
            stateCodeDic["1"] = StringId.SystemIsBusy;
            //系统维护中~请稍后再试~
            stateCodeDic["2"] = HDL_ON.StringId.SystemMaintenance;
            stateCodeDic["2"] = StringId.SystemMaintenance;
            ////服务异常
            //stateCodeDic["3"] = StringId.SystemIsBusy;
            //签名错误
            stateCodeDic["4"] = HDL_ON.StringId.SignatureError;
            stateCodeDic["4"] = StringId.SignatureError;
            //请求失败,参数异常!
            stateCodeDic["9"] = StringId.RequestFailedParameterException;
            //验证码校验失败
            stateCodeDic["14"] = HDL_ON.StringId.VerificationCodeWrong;
            stateCodeDic[StateCode.VERIFICATION_CODE_WRONG] = StringId.VerificationCodeWrong;
            //验证码发送频繁,请稍后再试!
            stateCodeDic["15"] = HDL_ON.StringId.VerificationCodeSentFrequently;
            stateCodeDic["15"] = StringId.VerificationCodeSentFrequently;
            //验证码发送失败
            stateCodeDic["16"] = StringId.FailedToSendVerificationCode;
            //会话超时,请更新token
            stateCodeDic["10001"] = HDL_ON.StringId.NotLogin;
            ////登录失败,账号或者密码错误
            stateCodeDic["10008"] = HDL_ON.StringId.LoginFailed_AccountOrPasswordError;
            stateCodeDic[StateCode.TOKEN_EXPIRED] = StringId.NotLogin;
            //解析用户身份错误,请重新登录
            stateCodeDic["10006"] = StringId.InvalidToken;
            //您已在另一个设备登录
            stateCodeDic["10007"] = StringId.LoggedOnOtherDevices;
            //登录失败,账号或者密码错误
            stateCodeDic["10008"] = StringId.LoginFailed_AccountOrPasswordError;
            //用户已经被禁用
            stateCodeDic["10009"] = StringId.TheAccountHasBeenDisabled;
            //账号不存在
            stateCodeDic[StateCode.ACCOUNT_NOT_EXIST] = HDL_ON.StringId.AccountNotExist;
            stateCodeDic[StateCode.ACCOUNT_NOT_EXIST] = StringId.AccountNotExist;
            //用户未登录
            stateCodeDic["10011"] = StringId.InvalidToken;
            //账号已存在
            stateCodeDic["10012"] = HDL_ON.StringId.AccountExist;
            //#endregion
            ////return;
            //#region 2020-09-18 新对接错误码
            //////操作失败,请重试
            ////stateCodeDic ["10001"] = HDL_ON.StringId.uOperationFailed;
            ////请求参数错误
            //stateCodeDic["10101"] = HDL_ON.StringId.uParameterError;
            ////无效登录Token
            //stateCodeDic["10102"] = HDL_ON.StringId.uNoLogin;
            ////登录失败,账号或者密码错误
            //stateCodeDic["10103"] = HDL_ON.StringId.Accountorpassworderro;
            ////没有记录
            //stateCodeDic["10104"] = HDL_ON.StringId.NoRecord;
            ////操作权限不足
            //stateCodeDic["10105"] = HDL_ON.StringId.uBeRestrict;
            ////不存在
            //stateCodeDic["10106"] = HDL_ON.StringId.NO_EXISTS;
            stateCodeDic["10012"] = StringId.AccountExist;
            //手机号已注册
            stateCodeDic["10013"] = StringId.AccountExist;
            //邮箱已注册
            stateCodeDic["10014"] = StringId.AccountExist;
            //原密码错误
            stateCodeDic["10015"] = StringId.OldPwdNoYes;
            //绑定号码重复
            stateCodeDic["10016"] = StringId.DuplicateBindingNumber;
            //注册失败
            stateCodeDic["10017"] = StringId.RegistrationFailedPleaseTryAgain;
            ////租户不存在
            //stateCodeDic["10018"] = StringId.10018;
            //密码错误次数过多,账号被锁定!
            stateCodeDic["10019"] = StringId.AccountLoginLock;
            //没有权限
            stateCodeDic["10105"] = StringId.PermissionDenied;
            //验证码已经发送
            stateCodeDic["10207"] = StringId.VerificationCodePrompt;
            //发送验证码错误
            stateCodeDic["10210"] = StringId.VerificationCodeWrong;
            ////-------------------用户模块-------------------
            ////账号不存在
            //stateCodeDic["10201"] = HDL_ON.StringId.uAccountNoExists;
            ////账号已经存在
            //stateCodeDic["10202"] = HDL_ON.StringId.RegisterSendVerCode_Exist;
            ////验证码已失效
            //stateCodeDic["10203"] = HDL_ON.StringId.ValidatorCode_NoRecord;
            ////验证码错误
            //stateCodeDic["10204"] = HDL_ON.StringId.VerificationCodeError;
            ////登录失败,密码错误
            //stateCodeDic["10205"] = HDL_ON.StringId.PasswordIsError;
            ////验证码无效[用户没有通过手机[邮箱]号获取验证码]
            //stateCodeDic["10206"] = HDL_ON.StringId.ValidatorCode_ValidCodeAndPhoneNoEqual;
            ////验证码发送频繁
            //stateCodeDic["10207"] = HDL_ON.StringId.VERIFY_CODE_SENDED;
            ////该账号已经绑定
            //stateCodeDic["10208"] = HDL_ON.StringId.Exist;
            ////用户名称已经存在
            //stateCodeDic["10209"] = HDL_ON.StringId.Exist;
            ////验证码发送失败
            //stateCodeDic["10210"] = HDL_ON.StringId.RegisterSendVerCode_SendFail;
            ////枚举类型错误
            //stateCodeDic["11003"] = StringId.11003;
            ////-------------------更新密码模块-------------------
            ////原密码和新密码相同
            //stateCodeDic["10211"] = HDL_ON.StringId.UpdatePassword_NewPasswordAndOldPasswordEqual;
            ////旧密码不对
            //stateCodeDic["10212"] = HDL_ON.StringId.UpdatePassword_OldPwdNoYes;
            ////-------------------子账号模块-------------------
            ////子账号已经存在
            //stateCodeDic["10301"] = HDL_ON.StringId.BindSubAccount_Exist;
            ////子账号不存在
            //stateCodeDic["10302"] = HDL_ON.StringId.uAccountNoExists;
            ////不能把自己添加为成员
            //stateCodeDic["10303"] = HDL_ON.StringId.BindSubAccount_SameAccount;
            ////一样的远程请求
            //stateCodeDic["10304"] = HDL_ON.StringId.uOperationFailed;
            ////账号已经存在于此住宅
            //stateCodeDic["10305"] = HDL_ON.StringId.BindSubAccount_Exist;
            ////-------------------住宅模块-------------------
            ////当前住宅不属于该账号
            //stateCodeDic["10401"] = HDL_ON.StringId.HomeIdAndTokenNoConsistent;
            ////住宅名称已存在
            //stateCodeDic["10402"] = HDL_ON.StringId.EditZigbeeHome_Exist;
            //-------------------子账号模块-------------------
            //子账号已经存在
            stateCodeDic["10301"] = StringId.BindSubAccount_Exist;
            //子账号不存在
            stateCodeDic["10302"] = StringId.SubAccount_NoExists;
            //不能把自己添加为成员
            stateCodeDic["10303"] = StringId.BindSubAccount_SameAccount;
            ////相同的远程控制
            //stateCodeDic["10304"] = StringId.uOperationFailed;
            ////子账号昵称已经存在
            //stateCodeDic["10305"] = StringId.BindSubAccount_Exist;
            //-------------------住宅模块-------------------
            //当前住宅不属于该账号
            stateCodeDic["10401"] = StringId.HomeIdAndTokenNoConsistent;
            //住宅名称已存在
            stateCodeDic["10402"] = StringId.HomeName_Exist;
            ////住宅ID已存在
            //stateCodeDic["10403"] = HDL_ON.StringId.HOME_ID_EXISTS;
            ////住宅不存在
            //stateCodeDic["10404"] = HDL_ON.StringId.uZigbeeHome_NoRecord;
            //stateCodeDic["10403"] = StringId.HOME_ID_EXISTS;
            //住宅不存在
            stateCodeDic["10404"] = StringId.Home_NoExists;
            //住宅没有绑定网关
            stateCodeDic["10503"] = StringId.PleaseBindTheGatewayFirst;
            ////-------------------住宅分享模块-------------------
            ////住宅分享不存在
            //stateCodeDic["10405"] = HDL_ON.StringId.NO_EXISTS;
            ////调用用户模块接口失败
            //stateCodeDic["10213"] = HDL_ON.StringId;
            ////-------------------网关模块-------------------
            ////是否强制解绑网关
            //stateCodeDic["10501"] = HDL_ON.StringId.BindGwToHome_BindGatewaysExists;
            ////应用成功
            //stateCodeDic["10502"] = HDL_ON.StringId.AmendTheSuccess;
            ////当前住宅下并没有绑定指定的网关
            //stateCodeDic["10503"] = HDL_ON.StringId.ReleaseGatewayToZigbeeHome_NoBind;
            ////不支持
            //stateCodeDic["10504"] = HDL_ON.StringId.NOT_SUPPORT;
            ////网关MAC不存在
            //stateCodeDic["10505"] = HDL_ON.StringId.MACError;
            ////-------------------备份模块-------------------
            ////备注名称已经存在,请更换后重试!文件夹名称已经存在
            //stateCodeDic["10601"] = HDL_ON.StringId.uBackupNameExists;
            ////备份文件夹不存在
            //stateCodeDic["10602"] = HDL_ON.StringId.FolderNoExist;
            ////备份文件不存在
            //stateCodeDic["10603"] = HDL_ON.StringId.FileNoExist;
            //*********网关*********
            //网关不存在
            stateCodeDic["10506"] = StringId.GatewayDoesNotExist;
            ////-------------------跨区-------------------
            ////该接口不存在跨区操作
            //stateCodeDic["11001"] = HDL_ON.StringId.NOT_SUPPORT;
            ////跨区调用失败
            //stateCodeDic["11002"] = HDL_ON.StringId.NOT_SUPPORT;
            ////枚举错误
            //stateCodeDic["11003"] = HDL_ON.StringId.uOperationFailed;
            //控制失败
            stateCodeDic["14007"] = StringId.ControlFailure;
            //网关离线
            stateCodeDic["14005"] = StringId.GatewayOffline;
            //设备离线
            stateCodeDic["14006"] = StringId.DeviceOffline;
            //*********场景/自动化*********
            //场景已存在
            stateCodeDic["14501"] = StringId.SceneAlreadyExists;
            //自动化已存在
            stateCodeDic["14502"] = StringId.AutomationAlreadyExists;
            //*********设备*********
            //设备目标重复
            stateCodeDic["10801"] = StringId.DuplicateDeviceTarget;
            //没有远程控制权限
            stateCodeDic["10802"] = StringId.NoRemoteControlPermission;
            //设备不能为空
            stateCodeDic["10803"] = StringId.TheDeviceCannotBeEmpty;
            //用户没有设备的权限
            stateCodeDic["10804"] = StringId.NotHavePermissionToTheDevice;
            //设备不存在
            stateCodeDic["10805"] = StringId.TheDeviceDoesNotExist;
            //控制失败
            stateCodeDic["20000"] = StringId.ControlFailure;
            //网关离线
            stateCodeDic["20001"] = StringId.GatewayOffline;
            //设备离线
            stateCodeDic["20002"] = StringId.DeviceOffline;
            //spk不支持该功能
            stateCodeDic["20101"] = StringId.SpkNotSupportThisFeature;
            //spk功能不支持此功能值
            stateCodeDic["20102"] = StringId.SpkNotSupportThisFunctionValue;
            #endregion
            #endregion
        }
@@ -195,7 +212,7 @@
        /// <param name="revertObj">云端返回的数据</param>
        /// <param name="pra">请求参数</param>
        /// <returns></returns>
        public string GetMsgByRequestName(string requestName, string statuCode)
        public string GetMsgByRequestName(string statuCode)
        {
            if (IgnoreError == true)
            {
@@ -209,13 +226,13 @@
                return Language.StringByID(stateCodeDic[statuCode]);
            }
            if (dicMsg.ContainsKey(requestName) == true && dicMsg[requestName].ContainsKey(statuCode) == true)
            {
                //在册的Msg
                return Language.StringByID(dicMsg[requestName][statuCode]);
            }
            //if (dicMsg.ContainsKey(requestName) == true && dicMsg[requestName].ContainsKey(statuCode) == true)
            //{
            //    //在册的Msg
            //    return Language.StringByID(dicMsg[requestName][statuCode]);
            //}
            return Language.StringByID(HDL_ON.StringId.FailedRequestServer) + "\n(" + statuCode + ")";
            return Language.StringByID(StringId.FailedRequestServer) + "\n(" + statuCode + ")";
        }
@@ -226,28 +243,82 @@
        /// <param name="statuCode"></param>
        /// <param name="isTipStyle"></param>
        /// <param name="tipStr">补充的错误提示</param>
        public void ShowErrorInfoAlter(string requestName, string statuCode, bool isTipStyle = false, string tipStr = "")
        public void ShowErrorInfoAlter(string statuCode, bool isTipStyle = true, int closeTime = 2, string tipStr = "",bool showAllMsg = true)
        {
            try
            {
                string mes = GetMsgByRequestName(requestName, statuCode);
                if (mes == null) return;
                if (!string.IsNullOrEmpty(tipStr))
                //如果是token过期则刷新token
                if (statuCode == StateCode.TOKEN_EXPIRED)
                {
                    mes = tipStr + "\n" + mes;
                }
                if (isTipStyle)
                {
                    //MainPage.AddTip(mes);
                    StartRefreshToken();
                }
                else
                {
                    Application.RunOnMainThread(() => {
                        new Alert("", mes, Language.StringByID(HDL_ON.StringId.Close)).Show();
                    });
                    string mes = GetMsgByRequestName(statuCode);
                    if (mes == null) return;
                    if (!string.IsNullOrEmpty(tipStr))
                    {
                        if (showAllMsg)
                        {
                            mes = tipStr + "\n" + mes;
                        }else
                        {
                            mes = tipStr;
                        }
                    }
                    if (isTipStyle)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            var tip = new Tip()
                            {
                                Text = mes,
                                CloseTime = closeTime,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(MainPage.BaseView);
                        });
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            new Alert("", mes+$" \r\nCode:{statuCode}", Language.StringByID(StringId.Close)).Show();
                        });
                    }
                }
            }
            catch { }
        }
        /// <summary>
        /// StartRefreshToken
        /// </summary>
        public void StartRefreshToken()
        {
            if (isGetingToken) return;
            new System.Threading.Thread(() =>
            {
                isGetingToken = true;
                try
                {
                    var success = new HttpServerRequest().RefreshToken();
                    if (success == StateCode.SUCCESS) {
                        Utlis.WriteLine("RefreshToken success");
                    }
                }
                catch
                {
                }
                finally
                {
                    isGetingToken = false;
                }
            })
            { IsBackground = true }.Start();
        }
    }
@@ -257,13 +328,38 @@
    public class StateCode
    {
        /// <summary>
        /// 网络请求异常
        /// APP自定义错误码
        /// </summary>
        public const string NETWORK_ERROR = "-1";
        /// <summary>
        /// 数据解析错误
        /// APP自定义错误码
        /// </summary>
        public const string DATA_EXCEPTION = "-2";
        /// <summary>
        /// 请求成功的状态码
        /// </summary>
        public const string SUCCESS = "0";
        /// <summary>
        /// 验证码校验失败
        /// </summary>
        public const string VERIFICATION_CODE_WRONG = "14";
        /// <summary>
        /// 会话超时,请更新token
        /// </summary>
        public const string TOKEN_EXPIRED = "10001";
        /// <summary>
        /// 账号不存在的错误码
        /// </summary>
        public const string ACCOUNT_NOT_EXIST = "10010";
        /// <summary>
        /// 登录锁定,密码错误次数过多
        /// 密码输入错误超过10次,请30分钟后重试!
        /// </summary>
        public const string AccountLoginLock = "10019";
    }
}