陈嘉乐
2020-07-10 48ba446936b51fffafa7c3600c0dadc6ac0e8c20
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs
@@ -56,18 +56,7 @@
        /// 安防数据缓存
        /// </summary>
        private Dictionary<int, SafeguardZoneInfo> dicAllZoneInfo = new Dictionary<int, SafeguardZoneInfo>();
        /// <summary>
        /// 安防上报信息
        /// </summary>
        public List<SafeguardAlarmInfo> listAlarmInfo = new List<SafeguardAlarmInfo>();
        /// <summary>
        /// 上一次安防上报信息保存的文件名字(考虑到用户有可能24点的时候,不退出APP)
        /// </summary>
        private string oldDeviceAlarmFile = string.Empty;
        /// <summary>
        /// 锁
        /// </summary>
        private object objLock = new object();
        #endregion
        #region ■ 刷新安防___________________________
@@ -88,7 +77,7 @@
                this.ShowTipMsg(msg);
                return false;
            }
            var mainWayId = HdlGatewayLogic.Current.GetGatewayId(mainGateway);
            var mainWayId = mainGateway.GwId;
            //主题数固定5+3+1
            int topicCount = 9;
@@ -115,7 +104,7 @@
                {
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZigBee.Device.Safeguard.ErrorResponData>(jobject["Data"].ToString());
                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString());
                    if (temp != null)
                    {
                        string msg = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error);
@@ -188,7 +177,7 @@
            try
            {
                var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4036 } };
                await mainGateway.Send("Security/GetSecurityInfo", jObject.ToString());
                mainGateway.Send("Security/GetSecurityInfo", jObject.ToString());
            }
            catch { }
@@ -245,7 +234,7 @@
            //处理设备
            foreach (var data2 in allData.DeviceList)
            {
                string mainKey = data2.MacAddr + data2.Epoint;
                string mainKey = LocalDevice.Current.GetDeviceMainKeys(data2.MacAddr, data2.Epoint);
                //传感器设备信息
                var Deviceinfo = new Safeguard.ZoneDeviceListData();
                Deviceinfo.IsBypass = data2.IsBypass;
@@ -306,7 +295,7 @@
                if (data.Type == 0)
                {
                    //本地是否有这个设备
                    string mainKey = data.DeviceAddr + data.Epoint;
                    string mainKey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
                    //报警信息
                    zoneInfo.dicAlarmDevice[mainKey] = data;
                    CommonDevice device = LocalDevice.Current.GetDevice(mainKey);
@@ -570,7 +559,7 @@
                //一批设备里面,成功添加的
                if (data.Status == 0)
                {
                    listSuccess.Add(data.MacAddr + data.Epoint);
                    listSuccess.Add(LocalDevice.Current.GetDeviceMainKeys(data.MacAddr, data.Epoint));
                }
                else if (data.Status == 1)
                {
@@ -756,7 +745,7 @@
            {
                if (data.Status == 0)
                {
                    listKeys.Add(data.MacAddr + data.Epoint);
                    listKeys.Add(LocalDevice.Current.GetDeviceMainKeys(data.MacAddr, data.Epoint));
                }
            }
@@ -1165,10 +1154,10 @@
                    }
                    else if (data.Type == "1")
                    {
                        var scene = Common.SceneRoomUI.AllSceneRoomUIList.Find((obj) => obj.sceneUI.Id == data.ScenesId);
                        var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ScenesId);
                        if (scene != null)
                        {
                            string msg = scene.sceneUI.Name + "\r\n";
                            string msg = scene.Name + "\r\n";
                            //目标场景不存在
                            msg += Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
                            this.ShowTipMsg(msg);
@@ -1419,6 +1408,13 @@
            {
                return GarrisonMode.None;
            }
            //判断有没有其他逻辑去修改了布防模式
            //所以再次获取模式
            var safetyMode = await this.GetSafetyMode();
            if (safetyMode != null)
            {
                return GarrisonMode.None;
            }
            //参数 
            var Pra = new Safeguard.EnableModeData();
@@ -1504,10 +1500,6 @@
                this.ShowErrorMsg(msg);
                return GarrisonMode.RemoveGarrison;
            }
            //保存布防操作信息到本地
            HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison);
            return garrison;
        }
@@ -1608,13 +1600,6 @@
                this.ShowErrorMsg(msg);
                return -1;
            }
            if (garrison == GarrisonMode.RemoveGarrison)
            {
                //保存布防操作信息到本地
                HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison);
            }
            return 1;
        }
@@ -1640,22 +1625,13 @@
        /// </summary>
        public async Task<string> ShowInputUserPasswordForm()
        {
            //获取当前正在激活的画面
            var form = UserCenterLogic.GetNowActionForm();
            if (form == null)
            {
                //这种情况应该不存在
                this.ShowErrorMsg("ERROR:Not Found The ActionForm!");
                return null;
            }
            DialogInputFrameControl Dialogform = null;
            NumberPswInputDialogForm Dialogform = null;
            bool isShowingProgressBar = false;
            string ProgressBarText = string.Empty;
            string pasword = null;
            Application.RunOnMainThread(() =>
            HdlThreadLogic.Current.RunMain(() =>
            {
                isShowingProgressBar = CommonPage.Loading.Visible;
                ProgressBarText = CommonPage.Loading.Text;
@@ -1665,21 +1641,12 @@
                    CommonPage.Loading.Hide();
                }
                Dialogform = new DialogInputFrameControl(form, DialogFrameMode.OnlyPassword);
                //用户密码
                Dialogform.SetTitleText(Language.StringByID(R.MyInternationalizationString.uSafetyPassword));
                //设置提示信息:请输入用户密码
                Dialogform.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword));
                Dialogform = new NumberPswInputDialogForm();
                Dialogform.AddForm(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword), 4);
                //确认按钮
                Dialogform.ComfirmClickEvent += ((textValue) =>
                Dialogform.FinishInputEvent += ((textValue) =>
                {
                    if (textValue == string.Empty)
                    {
                        this.ShowErrorMsg(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword));
                        return;
                    }
                    Dialogform.CloseDialog();
                    Dialogform.CloseForm();
                    //用户密码
                    pasword = textValue;
                    //加密密码
@@ -1874,36 +1841,66 @@
        /// <summary>
        /// 设置胁迫的联系人方式
        /// </summary>
        /// <param name="dicPhone">keys:联系方式 values:地区码</param>
        /// <param name="listPhone">地区码-联系方式</param>
        /// <param name="listNote">联系人备注</param>
        /// <param name="addPhone">是否是新建联系人,false的时候,只改备注</param>
        /// <returns></returns>
        public async Task<bool> SetCoercePhoneNumber(Dictionary<string, string> dicPhone)
        public async Task<bool> SetCoercePhoneNumber(List<string> listPhone, List<string> listNote, bool addPhone = true)
        {
            var Pra = new Safeguard.SetCoercePhoneNumberData();
            var Actonobj = new Safeguard.PushTargetActionObj();
            Actonobj.Type = 2;
            Pra.Actions.Add(Actonobj);
            Pra.LoginToken = this.GetLoginToken();
            foreach (string phoneNum in dicPhone.Keys)
            if (addPhone == true)
            {
                var phoneInfo = new Safeguard.PushTargetInfo();
                Actonobj.PushTarget.Add(phoneInfo);
                //电话号码
                phoneInfo.PushNumber = dicPhone[phoneNum] + "-" + phoneNum;
            }
                var Pra = new Safeguard.SetCoercePhoneNumberData();
                var Actonobj = new Safeguard.PushTargetActionObj();
                Actonobj.Type = 2;
                Pra.Actions.Add(Actonobj);
                Pra.LoginToken = this.GetLoginToken();
            var result = await Safeguard.SetCoercePhoneNumberAsync(Pra);
            if (result == null || result.setCoercePhoneNumberResponseData == null || result.setCoercePhoneNumberResponseData.Result != 0)
                for (int i = 0; i < listPhone.Count; i++)
                {
                    var phoneInfo = new Safeguard.PushTargetInfo();
                    Actonobj.PushTarget.Add(phoneInfo);
                    //电话号码
                    phoneInfo.PushNumber = listPhone[i];
                }
                var result = await Safeguard.SetCoercePhoneNumberAsync(Pra);
                if (result == null || result.setCoercePhoneNumberResponseData == null || result.setCoercePhoneNumberResponseData.Result != 0)
                {
                    //修改胁迫联系方式失败
                    string msg = Language.StringByID(R.MyInternationalizationString.uChangedCoercePhoneNumberFail);
                    //拼接上【网关回复超时】的Msg
                    msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
                    this.ShowErrorMsg(msg);
                    return false;
                }
            }
            for (int i = 0; i < listNote.Count; i++)
            {
                //修改胁迫联系方式失败
                string msg = Language.StringByID(R.MyInternationalizationString.uChangedCoercePhoneNumberFail);
                //拼接上【网关回复超时】的Msg
                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
                this.ShowErrorMsg(msg);
                return false;
                var result = await Safeguard.SetCoercePhoneNumberNoteAsync(listPhone[i], listNote[i]);
                if (result == null)
                {
                    //修改备注信息失败
                    string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
                    //拼接上【网关回复超时】的Msg
                    msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时");
                    this.ShowErrorMsg(msg);
                    return false;
                }
                if (result.Result == -2)
                {
                    //错误:网关对象丢失
                    string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
                    this.ShowErrorMsg(msg);
                    return false;
                }
                if (result.Result != 0)
                {
                    //修改备注信息失败
                    string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
                    this.ShowErrorMsg(msg);
                    return false;
                }
            }
            return true;
        }
@@ -1941,16 +1938,39 @@
            return true;
        }
        /// <summary>
        /// 给联系号码添加备注的信息
        /// </summary>
        private class AddPushNumberNoteInfo
        {
            /// <summary>
            /// 固定253
            /// </summary>
            public int ActionType = 253;
            /// <summary>
            /// LoginToken
            /// </summary>
            public string LoginToken = string.Empty;
            /// <summary>
            /// 地区码-联系方式
            /// </summary>
            public string PushNumber = string.Empty;
            /// <summary>
            /// 联系人号码备注,最大63byte
            /// </summary>
            public string PushNumberNote = string.Empty;
        }
        #endregion
        #region ■ 报警目标状态的翻译文本_____________
        #region ■ 执行目标状态的翻译文本_____________
        /// <summary>
        /// 获取灯光类型的报警目标的状态文本
        /// 获取执行目标的状态文本
        /// </summary>
        /// <param name="listTaskInfo">动作对象,可以为空</param>
        /// <returns></returns>
        public string GetLightAlarmStatuText(List<Safeguard.TaskListInfo> listTaskInfo)
        public string GetAdjustTargetStatuText(List<Safeguard.TaskListInfo> listTaskInfo)
        {
            if (listTaskInfo == null || listTaskInfo.Count == 0)
            {
@@ -1959,13 +1979,22 @@
            }
            //要考虑它的排列顺序(可以按需求变更编号)
            Dictionary<int, string> dicSort = new Dictionary<int, string>();
            //最大编号
            int MaxNo = 4;
            //开关的位置编号
            int ControlNo = 0;
            //百分比的位置编号
            int persentNo = 1;
            //空调温度的位置编号
            int temparetureNo = 2;
            //空调模式的位置编号
            int modelNo = 3;
            //空调风速的位置编号
            int windNo = 4;
            foreach (var info in listTaskInfo)
            {
                #region ■ 开关控制____
                //开关控制
                if (info.TaskType == 1)
                {
@@ -1980,11 +2009,25 @@
                        dicSort[ControlNo] = Language.StringByID(R.MyInternationalizationString.uSimpleClose);
                    }
                }
                #endregion
                #region ■ 亮度调节____
                //亮度调节
                else if (info.TaskType == 3)
                {
                    dicSort[persentNo] = info.Data1 + "%";
                    if (info.Data1 == 0)
                    {
                        //关
                        dicSort[persentNo] = Language.StringByID(R.MyInternationalizationString.uSimpleClose);
                    }
                    else
                    {
                        dicSort[persentNo] = $"{(int)(info.Data1 * 1.0 / 254 * 100)}%";
                    }
                }
                #endregion
                #region ■ 窗帘设备____
                //窗帘设备(它的开关和开关控制是反过来的)
                else if (info.TaskType == 6)
                {
@@ -2004,13 +2047,84 @@
                        dicSort[persentNo] = info.Data2 + "%";
                    }
                }
                #endregion
                #region ■ 空调设备____
                //空调设备
                else if (info.TaskType == 5)
                {
                    if (info.Data1 == 3)
                    {
                        if (info.Data2 == 0)
                        {
                            return Language.StringByID(R.MyInternationalizationString.uSimpleClose);
                        }
                        else if (info.Data2 == 1)
                        {
                            //自动
                            dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Auto);
                        }
                        else if (info.Data2 == 3)
                        {
                            //制冷
                            dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Cool);
                        }
                        else if (info.Data2 == 4)
                        {
                            //制热
                            dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Heat);
                        }
                        else if (info.Data2 == 7)
                        {
                            //送风
                            dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_FanOnly);
                        }
                        else if (info.Data2 == 8)
                        {
                            //除湿
                            dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Dry);
                        }
                    }
                    else if (info.Data1 == 4 || info.Data1 == 5|| info.Data1 == 7)
                    {
                        //温度
                        dicSort[temparetureNo] = $"{ info.Data2 / 100}℃";
                    }
                    else if (info.Data1 == 6)
                    {
                        if (info.Data2 == 1)
                        {
                            //低风
                            dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Low);
                        }
                        else if (info.Data2 == 2)
                        {
                            //中风
                            dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Middle);
                        }
                        else if (info.Data2 == 3)
                        {
                            //高风
                            dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Height);
                        }
                    }
                }
                #endregion
            }
            //如果开关和百分比一起存在的话,则不显示开关文字
            if (dicSort.ContainsKey(ControlNo) == true && dicSort.ContainsKey(persentNo) == true)
            {
                dicSort.Remove(ControlNo);
            }
            //拼接文本
            string txtvalue = string.Empty;
            for (int i = 0; i < dicSort.Count; i++)
            for (int i = 0; i <= MaxNo; i++)
            {
                txtvalue += dicSort[i] + " ";
                if (dicSort.ContainsKey(i) == true)
                {
                    txtvalue += dicSort[i] + " ";
                }
            }
            return txtvalue.Trim();
@@ -2040,7 +2154,7 @@
            bool success = false;
            //超时时间
            int TimeOut = 0;
            string checkTopic = HdlGatewayLogic.Current.GetGatewayId(realWay) + "/Security/AdminSetNewPassword_Respon";
            string checkTopic = realWay.GwId + "/Security/AdminSetNewPassword_Respon";
            Action<string, string> getResultAction = (topic, message) =>
            {
                try
@@ -2063,7 +2177,7 @@
                var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 4033 } };
                var data = new Newtonsoft.Json.Linq.JObject { { "HomeId", Common.Config.Instance.HomeId }, { "Password", password } };
                jObject.Add("Data", data);
                await realWay.Send("Security/AdminSetNewPassword", jObject.ToString());
                realWay.Send("Security/AdminSetNewPassword", jObject.ToString());
            }
            catch
            {
@@ -2201,10 +2315,11 @@
        /// 获取登陆者的Token(好像管理员登陆的时候,需要变更Token,所以暂且定义一个函数出来)
        /// </summary>
        /// <returns></returns>
        private string GetLoginToken()
        public string GetLoginToken()
        {
            //获取控制主人账号的Token
            return UserCenterLogic.GetConnectMainToken();
            //return UserCenterLogic.GetConnectMainToken();
            return Config.Instance.Token;
        }
        #endregion