gxc
2020-02-28 66a9965c44ecc32a6696abca876ab9d1cd091584
ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs
@@ -877,7 +877,10 @@
            /// 最少4个字符,最大32个字符
            /// </summary>
            public string Password;
            /// <summary>
            /// 用户密码提示语
            /// </summary>
            public string PassWordTips = string.Empty;
        }
        #endregion
@@ -886,10 +889,11 @@
        /// *新增或重设用户密码(需要管理员权限)
        /// <para>userId:用户id 如果用户id存在,则修改密码。如果用户id不存在,则为该id新增密码
        /// 为0时,自动分配新的用户id。为5时,则修改胁迫密码。取值范围0-5。</para>
        ///  <para>password:新管理员密码</para>
        /// <para>password:新管理员密码</para>
        /// <para>passWordTips:密码提示</para>
        /// <para>loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。</para>
        /// </summary> 
        public static async System.Threading.Tasks.Task<SetUserPasswordResponseAllData> SetUserPasswordAsync(int userId, string password,string loginToken)
        public static async System.Threading.Tasks.Task<SetUserPasswordResponseAllData> SetUserPasswordAsync(int userId, string password, string passWordTips, string loginToken)
        {
            return await System.Threading.Tasks.Task.Run(async () =>
            {
@@ -980,6 +984,7 @@
                    {
                     { "UserId", userId  },
                     { "Password", password},
                     { "PassWordTips", passWordTips},
                     { "LoginToken", loginToken}
                    };
                    jObject.Add("Data", data);
@@ -1002,6 +1007,129 @@
                }
                mainGateway.Actions -= action;
                System.Console.WriteLine("Security/SetUserPassword_Actions 退出" + System.DateTime.Now.ToString());
                return d;
            });
        }
        /// <summary>
        /// *新增或重设用户密码(需要管理员权限)
        /// <para>userId:用户id 如果用户id存在,则修改密码。如果用户id不存在,则为该id新增密码
        /// 为0时,自动分配新的用户id。为5时,则修改胁迫密码。取值范围0-5。</para>
        /// <para>password:新管理员密码</para>
        /// <para>passWordTips:密码提示</para>
        /// <para>loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。</para>
        /// </summary>
        public static async System.Threading.Tasks.Task<SetUserPasswordResponseAllData> SetPassWordTipsAsync(int userId, string password, string passWordTips, string loginToken)
        {
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                SetUserPasswordResponseAllData d = null;
                var mainGateway = ZbGateway.MainGateWay;
                if (mainGateway == null)
                {
                    d = new SetUserPasswordResponseAllData { errorMessageBase = "当前没有主网关" };
                    return d;
                }
                Action<string, string> action = (topic, message) =>
                {
                    var gatewayID = topic.Split('/')[0];
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    if (topic == gatewayID + "/" + "Error_Respon")
                    {
                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = mainGateway.getGatewayBaseInfo.gwID };
                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
                        if (temp == null)
                        {
                            d = new SetUserPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" };
                        }
                        else
                        {
                            d = new SetUserPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
                        }
                    }
                    if (topic == gatewayID + "/" + "Security/Error_Respon")
                    {
                        var securityTemp = new Safeguard() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.getGatewayBaseInfo.gwID };
                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
                        d = new SetUserPasswordResponseAllData { };
                        if (temp == null)
                        {
                            d.errorMessageBase = "网关错误回复,且数据是空";
                        }
                        else
                        {
                            if (temp.Error == 1)
                            {
                                d.errorMessageBase = "网关不是主网关,无法进行该操作。";
                            }
                            else if (temp.Error == 2)
                            {
                                d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。";
                            }
                            d.errorResponData = temp;
                        }
                    }
                    if (topic == gatewayID + "/" + "Security/AddPassWordTips_Respon")
                    {
                        var security = new Safeguard() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
                        var result = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(jobject["Data"]["Result"].ToString());
                        if (result == 0)
                        {
                            security.setUserPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetUserPasswordResponseData>(jobject["Data"].ToString());
                            if (security.setUserPasswordResponseData != null)
                            {
                                d = new SetUserPasswordResponseAllData { setUserPasswordResponseData = security.setUserPasswordResponseData };
                            }
                        }
                        else
                        {
                            d = new SetUserPasswordResponseAllData { };
                            var r = new SetUserPasswordResponseData();
                            r.Result = result;
                            d.setUserPasswordResponseData = r;
                        }
                    }
                };
                mainGateway.Actions += action;
                try
                {
                    var jObject = new Newtonsoft.Json.Linq.JObject() {
                                    { "Cluster_ID", 0 },
                                    { "Command", 4037}
                                };
                    var data = new JObject
                    {
                     { "UserId", userId  },
                     { "Password", password},
                     { "PassWordTips", passWordTips},
                     { "LoginToken", loginToken}
                    };
                    jObject.Add("Data", data);
                    mainGateway.Send("Security/AddPassWordTips", jObject.ToString());
                }
                catch
                {
                }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
                {
                    await System.Threading.Tasks.Task.Delay(10);
                    if (d != null)
                    {
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                {
                    d = new SetUserPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                mainGateway.Actions -= action;
                return d;
            });
@@ -6485,7 +6613,65 @@
                System.Console.WriteLine($"Security/AddZoneAction(设置胁迫状态下的电话号码)_Actions 退出_{System.DateTime.Now.ToString()}");
                return d;
            });
        }
        /// <summary>
        /// *设置胁迫状态下被通知的联系号码的备注(需要管理员权限). -2:主网关丢失
        /// </summary>
        /// <param name="strPhone">地区码-联系方式</param>
        /// <param name="strNote">备注,最大63byte</param>
        /// <returns></returns>
        public static async System.Threading.Tasks.Task<SetCoercePhoneNumberResponseData> SetCoercePhoneNumberNoteAsync(string strPhone,string strNote)
        {
            SetCoercePhoneNumberResponseData d = null;
            var mainGateway = ZbGateway.MainGateWay;
            if (mainGateway == null)
            {
                d = new SetCoercePhoneNumberResponseData();
                d.Result = -2;
                return d;
            }
            Action<string, string> action = (topic, message) =>
            {
                var gatewayID = topic.Split('/')[0];
                if (topic == gatewayID + "/" + "Security/AddPushNumberNote_Respon")
                {
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    d = Newtonsoft.Json.JsonConvert.DeserializeObject<SetCoercePhoneNumberResponseData>(jobject["Data"].ToString());
                }
            };
            mainGateway.Actions += action;
            try
            {
                var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4038 } };
                var data = new JObject
                    {
                        { "ActionType", 253},
                        { "LoginToken", Shared.Phone.UserCenter.HdlSafeguardLogic.Current.GetLoginToken()},
                        { "PushNumber", strPhone},
                        { "PushNumberNote", strNote}
                    };
                jObject.Add("Data", data);
                mainGateway.Send("Security/AddPushNumberNote", jObject.ToString());
            }
            catch { }
            int timeOut = 0;
            while (timeOut <= 60)
            {
                await System.Threading.Tasks.Task.Delay(50);
                if (d != null)
                {
                    break;
                }
                timeOut++;
            }
            mainGateway.Actions -= action;
            return d;
        }
        /// <summary>
        /// 设置胁迫状态下被通知的联系号码的返回数据 ,网关反馈信息
@@ -6567,7 +6753,10 @@
            /// 推送信息的目标手机号码
            ///</summary>
            public string PushNumber;
            /// <summary>
            /// 备注信息
            /// </summary>
            public string PushNumberNote;
        }
        /// <summary>