From a4924de3136289d10cabbf2f61a228387d44ded7 Mon Sep 17 00:00:00 2001 From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local> Date: 星期四, 07 十一月 2019 13:48:36 +0800 Subject: [PATCH] Merge branch 'dev-tzy' into DEV_GXC --- ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindInfo.cs | 589 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 589 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindInfo.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindInfo.cs index 4977f95..63cb01f 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindInfo.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindInfo.cs @@ -15,6 +15,205 @@ /// 褰撳墠鎸夐敭閰嶇疆鐨勫姛鑳� /// </summary> public static int clusterID = 0; + /// <summary> + /// 璁板綍鏃х殑鐩爣鍒楄〃 + /// </summary> + public static List<CommonDevice> oldTargetList = new List<CommonDevice>(); + + public static async System.Threading.Tasks.Task<int> RemoveTargets(BindObj.BindListResponseObj bindDevice, Panel currentKey) + { + var delDevice = new BindObj.DelDeviceBindData(); + delDevice.DeviceAddr = currentKey.DeviceAddr; + delDevice.Epoint = currentKey.DeviceEpoint; + + if (bindDevice.BindType == 0 || bindDevice.BindType == 1) + { + var removeDevice = new BindObj.RemoveBindListObj(); + removeDevice.BindCluster = bindDevice.BindCluster; + removeDevice.BindType = 0; + removeDevice.BindMacAddr = bindDevice.BindMacAddr; + removeDevice.BindEpoint = bindDevice.BindEpoint; + delDevice.RemoveBindList.Add(removeDevice); + } + else if (bindDevice.BindType == 2) + { + var removeDevice = new BindObj.RemoveBindListObj(); + removeDevice.BindCluster = bindDevice.BindCluster; + removeDevice.BindType = 1; + removeDevice.BindScenesId = bindDevice.BindScenesId; + delDevice.RemoveBindList.Add(removeDevice); + } + var delResult = await currentKey.DelDeviceBindAsync(delDevice); + foreach (var re in delResult.delDeviceBindResponseData.RemoveBindList) + { + switch (re.Result) + { + case 0: + return 0; + break; + case 4: + + if (delResult.removeBindResultResponseData != null) + { + if (delResult.removeBindResultResponseData.Result == 0) + { + return 0; + } + } + break; + } + } + return -1; + } + + /// <summary> + /// 妫�娴嬭璁惧鑳藉惁鏄剧ず + /// </summary> + /// <param name="device"></param> + /// <returns></returns> + public static bool CheckCanShowDevice(ZigBee.Device.CommonDevice device, string curDeviceBindType = "AddSwitch") + { + if (device == null) + { + return false; + } + //濡傛灉鏄紶鎰熷櫒锛屾垨鑰呮槸娌℃湁寮�鍏崇皣鐨勮瘽(杩欓噷鍒ゆ柇鐨勬槸杈撳叆绨�) + if ((device.Type == ZigBee.Device.DeviceType.IASZone) || InMatchDevice(device, curDeviceBindType) == false) + { + return false; + } + return true; + } + + /// <summary> + /// 妫�娴嬭鎴块棿鑳藉惁鏄剧ず + /// </summary> + /// <param name="room"></param> + /// <returns></returns> + public static bool CheckCanShowRoom(Common.Room room, string curDeviceBindType = "AddSwitch") + { + if (room.DeviceUIList.Count == 0) + { + return false; + } + if (room.IsLove == true) + { + return false; + } + foreach (var deviceUi in room.DeviceUIList) + { + //妫�娴嬭璁惧鑳藉惁鏄剧ず + if (CheckCanShowDevice(deviceUi.CommonDevice, curDeviceBindType) == false) + { + continue; + } + + //瀛樺湪璁惧鐨勮瘽锛屾鎴块棿鍙互鏄剧ず + return true; + } + return false; + } + + /// <summary> + /// 妫�娴嬭澶囨槸鍚︽嫢鏈夊紑鍏崇殑鍔熻兘(杈撳叆绨�) + /// </summary> + /// <param name="device"></param> + /// <returns></returns> + public static bool InMatchDevice(CommonDevice device, string curDeviceBindType = "AddSwitch") + { + foreach (var data in device.InClusterList) + { + switch (curDeviceBindType) + { + case "AddSwitch": + //鎷ユ湁on/off鍔熻兘鐨勶紝鎵嶆敮鎸佹祴璇� + if (data.InCluster == 6) + { + return true; + } + break; + case "AddDimmer": + if (data.InCluster == 8) + { + return true; + } + break; + case "AddCurtain": + if (data.InCluster == 258) + { + return true; + } + break; + } + } + return false; + } + + /// <summary> + /// 搴曢儴瀹屾垚鎸夐挳鏄剧ず + /// </summary> + /// <returns></returns> + public static void FinishDisplay(List<Room> roomTempList, Button btnFinish) + { + if (roomTempList.Count == 0) + { + btnFinish.Enable = false; + btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; + } + else + { + btnFinish.Enable = true; + btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; + } + } + + /// <summary> + /// 鑾峰彇褰撳墠妤煎眰鍚嶇О + /// </summary> + /// <returns></returns> + public static string GetCurrentKeyAllRoomList() + { + var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); + foreach (var floorId in dicFloor.Keys) + { + //绗竴涓ゼ灞� + return dicFloor[floorId]; + break; + } + return null; + } + + /// <summary> + /// 鑾峰彇褰撳墠妤煎眰 + /// </summary> + /// <returns></returns> + public static string GetCurrentSelectFloorId() + { + var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); + foreach (var floorId in dicFloor.Keys) + { + //绗竴涓ゼ灞� + return floorId; + break; + } + return null; + } + + /// <summary> + /// 鑾峰彇褰撳墠妤煎眰鍚嶇О + /// </summary> + /// <returns></returns> + public static string GetCurrentSelectFloorIdName() + { + var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); + foreach (var floorId in dicFloor.Keys) + { + //绗竴涓ゼ灞� + return dicFloor[floorId]; + break; + } + return null; + } /// <summary> /// 妫�娴嬫帶鍒堕潰鏉�(鎸夐敭绫�)鎵�鎷ユ湁鐨勫姛鑳�,鐜版敮鎸佺殑鏈変互涓嬪嚑绉�(蹇呭畾瀛樺湪閿��,鍑洪敊浼氳繑鍥瀗ull) @@ -227,6 +426,396 @@ return dicCheck; } + #region 绉佹湁鏁版嵁澶囦唤姝ラ(鏈夌敤浠g爜锛岃繖閲屽厛娉ㄩ噴鎺夛級 + // title.MouseLongEventHandler += async(sender, e) => + // { + // string fileName = "Panel_"; + // fileName += currentKey.FilePath; + // var file = await System.Threading.Tasks.Task.Factory.StartNew(() => Newtonsoft.Json.JsonConvert.SerializeObject(currentKey)); + // var data = System.Text.Encoding.UTF8.GetBytes(file); + // //缃戝叧涓垱寤哄瓨鍌ㄦ暟鎹殑鏂囦欢 + // var saveFile = await currentKey.Gateway.CreateFileAsync(fileName); + // //涓婁紶鏁版嵁鍒扮綉鍏� + // var saveData = await currentKey.Gateway.SendFileAsync(data); + // }; + + // //瀛樺偍涓嬭浇鐨勬枃浠舵暟鎹� + // var byteSource = new System.Collections.Generic.List<byte>(); + // if (byteSource != null) + // { + // //鎭㈠鏁版嵁瀵硅薄 + // var realDa = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel>(System.Text.Encoding.UTF8.GetString(byteSource.ToArray())); + //} + + ////涓嬭浇鎭㈠绉佹湁鏁版嵁 + //title.MouseUpEventHandler +=async(sender, e) => + // { + // var key11 = currentKey; + //string fileName = "Panel_"; + //fileName += currentKey.FilePath; + // //鑾峰彇褰撳墠鏂囦欢鐨勫叿浣撲俊鎭� + // var getFileSize = await currentKey.Gateway.GetCurrentFileInfoAsync(fileName); + ////涓嬭浇鏂囦欢 + //var saveFileName = await currentKey.Gateway.SetDownloadFileAsync(fileName); + ////鎺ユ敹鏁版嵁 + //Action<string, byte[]> action = (topic, dataContent) => + //{ + // if (topic.Split('/')[0] + "/" + topic.Split('/')[1] + "/" + topic.Split('/')[2] == topic.Split('/')[0] + "/" + "FileTransfer/DownloadFile") + // { + // byte[] fileBytes = dataContent; + // if (fileBytes[5] != 1) + // { + // if (fileBytes.Length == 2056) + // { + // var tempBytes = new byte[2048]; + // System.Array.Copy(fileBytes, 8, tempBytes, 0, 2048); + // byteSource.AddRange(tempBytes); + // } + // else + // { + // var tempBytes = new byte[fileBytes.Length - 8]; + // System.Array.Copy(fileBytes, 8, tempBytes, 0, tempBytes.Length); + // byteSource.AddRange(tempBytes); + // } + // } + // else + // { + // var tempBytes = new byte[fileBytes.Length - 8]; + // System.Array.Copy(fileBytes, 8, tempBytes, 0, tempBytes.Length); + // byteSource.AddRange(tempBytes); + // } + + // } + //}; + //currentKey.Gateway.FileContentAction += action; + //}; + #endregion + + ///// <summary> + ///// 鍒楄〃鎺т欢 + ///// </summary> + //private VerticalScrolViewLayout listView = null; + ///// <summary> + ///// 宸茬粡瀛樺湪鐨勭粦瀹氳澶� + ///// </summary> + //private Dictionary<string, CommonDevice> dicEsixtDevice = new Dictionary<string, CommonDevice>(); + + ///// <summary> + ///// 鑾峰彇璁惧鐨勫敮涓�涓婚敭 + ///// </summary> + ///// <param name="device"></param> + ///// <returns></returns> + //public string GetDeviceMainKeys(CommonDevice device) + //{ + // return device.DeviceAddr + device.DeviceEpoint; + //} + + ///// <summary> + ///// 鏄剧ず閿欒淇℃伅绐楀彛 + ///// </summary> + ///// <param name="msg"></param> + //private void ShowErrorMsg(string msg) + //{ + // Application.RunOnMainThread(() => + // { + // var contr = new Phone.UserCenter.ErrorMsgControl(msg); + // contr.Show(); + // }); + //} + + ///// <summary> + ///// 鏄剧ずTip淇℃伅绐楀彛 + ///// </summary> + ///// <param name="msg"></param> + //private void ShowTipMsg(string msg) + //{ + // Application.RunOnMainThread(() => + // { + // var contr = new Phone.UserCenter.TipViewControl(msg); + // contr.ShowView(); + // }); + //} + + ///// <summary> + ///// 鏄剧ず涓�涓渶瑕佺‘璁ょ殑淇℃伅妗� + ///// </summary> + ///// <param name="msg">淇℃伅</param> + ///// <param name="methodName">鏂规硶鍚�(璇风‘璁よ繖鏄竴涓叡鏈夋柟娉�)</param> + ///// <param name="obj">鍥炶皟鍑芥暟鐨勫惎鍔ㄥ弬鏁�</param> + //public void ShowConfirmMsg(string msg, string methodName = null, params object[] obj) + //{ + // Application.RunOnMainThread(() => + // { + // var alert = new ConfirmMsgControl(msg); + // alert.Show(); + + // if (methodName != null) + // { + // alert.ResultEventHandler += (sender, result) => + // { + // if (result == true) + // { + // this.LoadFormMethodByName(this, methodName, obj); + // } + // }; + // } + // }); + //} + + ///// <summary> + ///// 鎵ц鎸囧畾鐢婚潰鐨勬柟娉� + ///// </summary> + ///// <param name="form">鎸囧畾鐢婚潰鐨勮嫳鏂囧悕</param> + ///// <param name="method">鎸囧畾瑕佸姞杞界殑鏂规硶鍚�</param> + ///// <param name="parameter">鍚姩鍙傛暟</param> + //public object LoadFormMethodByName(BindInfo form, string method, params object[] parameter) + //{ + // return form.GetType().InvokeMember(method, System.Reflection.BindingFlags.InvokeMethod, null, form, parameter); + //} + + ///// <summary> + ///// 娣诲姞鐢婚潰,鍚姩鍙傛暟鐢辨寚瀹氱敾闈㈢殑ShowForm鍑芥暟鎵�鎸囧畾 + ///// </summary> + ///// <param name="newform">瀵硅薄鐢婚潰</param> + ///// <param name="parameter">鍚姩鍙傛暟锛氬弬鏁扮敱鎸囧畾鐢婚潰鐨凷howForm鍑芥暟鎵�鎸囧畾</param> + //public void AddForm(UserCenterCommonForm newform, params object[] parameter) + //{ + // //妫�娴嬭兘鍚﹁拷鍔犵敾闈�(闃叉鐢婚潰浜岄噸娣诲姞)锛屽綋鐐瑰嚮杩囧揩鏃讹紝浼氭湁鍑犵巼浜岄噸娣诲姞 + // if (UserCenterLogic.CheckCanAddForm(newform) == false) + // { + // return; + // } + // newform.FormID = UserCenterLogic.GetFormName(newform); + + // UserView.HomePage.Instance.AddChidren(newform); + // UserView.HomePage.Instance.PageIndex += 1; + // //鍒濆鍖栫晫闈㈡鏋� + // newform.InitForm(parameter); + // //鎵цShowForm()鏂规硶 + // newform.LoadShowFormMethod(parameter); + //} + + ///// <summary> + ///// 鑳界粦瀹氬埌鎸夐敭鐨勮澶� + ///// </summary> + ///// <param name="device"></param> + ///// <returns></returns> + //public bool SupportDevice(CommonDevice device,int currentClusterID) + //{ + // foreach (var data in device.InClusterList) + // { + // //鎷ユ湁on/off鍔熻兘鐨勶紝鎵嶆敮鎸佹祴璇� + // if (data.InCluster == currentClusterID) + // { + // return true; + // } + // } + // return false; + //} + + ///// <summary> + ///// 缁戝畾PIR浼犳劅鍣ㄧ殑鐩爣(杩斿洖鎴愬姛璁剧疆鐨勮澶�,閿欒鏃讹紝杩斿洖null) + ///// </summary> + ///// <param name="i_iasZone">浼犳劅鍣�</param> + ///// <param name="listDevice">瑕佺粦瀹氱殑鐩爣璁惧</param> + ///// <returns></returns> + //public async Task<List<CommonDevice>> BindKeyDeviceTargets(Panel key, List<CommonDevice> listDevice,int currentClusterID) + //{ + // if (listDevice.Count == 0) + // { + // return new List<CommonDevice>(); + // } + + // var dicDevice = new Dictionary<string, CommonDevice>(); + + // //缁勮鏁版嵁 + // var addData = new Panel.AddBindData(); + // addData.DeviceAddr = key.DeviceAddr; + // addData.Epoint = key.DeviceEpoint; + // foreach (var device in listDevice) + // { + // var info = new Panel.AddBindListObj(); + // info.BindCluster = currentClusterID; + // info.BindMacAddr = device.DeviceAddr; + // info.BindEpoint = device.DeviceEpoint; + // info.BindType = 0; + + // addData.BindList.Add(info); + + // //杩斿洖鎴愬姛璁惧鐨勬椂鍊欎娇鐢� + // string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + // dicDevice[mainkeys] = device; + // } + + // var result = await key.AddDeviceBindAsync(addData); + // if (result.addedDeviceBindResponseData == null) + // { + // //濡傛灉缃戝叧宸茬粡鎺夌嚎 + // bool flage = Common.LocalGateway.Current.CheckGatewayOnLineOnTimeout(key.CurrentGateWayId, result.errorMessageBase); + // if (flage == false) + // { + // return null; + // } + // //缁戝畾鐩爣璁剧疆澶辫触 + // string msg = Language.StringByID(R.MyInternationalizationString.uSetBindTargetsFail); + // //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg + // msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg); + + // this.ShowErrorMsg(msg); + // return null; + // } + + // var listSuccess = new List<CommonDevice>(); + // foreach (var data in result.addedDeviceBindResponseData.BindList) + // { + // string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(data.BindMacAddr, data.BindEpoint); + // //0:娣诲姞鎴愬姛 3:宸茬粡瀛樺湪锛屼篃鍙互浠h〃鎴愬姛 + // if (data.Result == 0 || data.Result == 3) + // { + // if (dicDevice.ContainsKey(mainkeys) == true) + // { + // listSuccess.Add(dicDevice[mainkeys]); + // } + // } + // //1锛氬け璐ワ紝鑺傜偣璁惧鎴栧満鏅笉瀛樺湪 + // else if (data.Result == 1) + // { + // if (dicDevice.ContainsKey(mainkeys) == true) + // { + // //璁惧鍚嶇О 缁戝畾澶辫触 + // string msg = Shared.Common.LocalDevice .Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; + // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); + // this.ShowTipMsg(msg); + // } + // } + // //2锛氭湭鐭ワ紝鐢辫妭鐐硅澶囧弽棣堝彂閫佲�淏ind/BindResult鈥濅富棰樻秷鎭‘瀹氭槸鍚︽垚鍔� + // else if (data.Result == 2) + // { + // if (result.addBindResultResponseData == null) + // { + // //璁惧鍚嶇О 缁戝畾澶辫触 + // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; + // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); + // this.ShowTipMsg(msg); + // } + // else + // { + // //娣诲姞鎴愬姛 + // if (result.addBindResultResponseData.Result == 0) + // { + // if (dicDevice.ContainsKey(mainkeys) == true) + // { + // listSuccess.Add(dicDevice[mainkeys]); + // } + // } + // //璁惧鍚嶇О 缁戝畾鍒楄〃宸叉弧 + // else if (result.addBindResultResponseData.Result == 140) + // { + // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; + // msg += Language.StringByID(R.MyInternationalizationString.uBindListIsFull); + // this.ShowTipMsg(msg); + // } + // else + // { + // //璁惧鍚嶇О 缁戝畾澶辫触 + // string msg = Shared.Common.LocalDevice.Current.GetDeviceEpointName(dicDevice[mainkeys]) + " "; + // msg += Language.StringByID(R.MyInternationalizationString.BindFailed); + // this.ShowTipMsg(msg); + // } + // } + // } + // } + + // return listSuccess; + //} + + ///// <summary> + ///// 鏄剧ず璁惧閫夋嫨鐨勭晫闈� + ///// </summary> + //public void ShowDeviceSelectForm(Panel key, int currentClusterID) + //{ + // var listShowDevice = new List<CommonDevice>(); + // foreach (var device in PanelBindPage.list) + // { + // if (SupportDevice(device, currentClusterID) == false) + // { + // continue; + // } + + // string mainKeys = this.GetDeviceMainKeys(device); + // if (this.dicEsixtDevice.ContainsKey(mainKeys) == true) + // { + // //濡傛灉宸茬粡娣诲姞浜嗭紝鍒欎笉鍐嶆樉绀� + // continue; + // } + + // listShowDevice.Add(device); + // } + + // var listSelect = new List<string>(); + // foreach (string mainkeys in this.dicEsixtDevice.Keys) + // { + // listSelect.Add(mainkeys); + // } + + // var form = new SelectDeviceForm(); + // this.AddForm(form, listShowDevice, listSelect, false); + // //娣诲姞缁戝畾鐩爣 + // form.SetTitleText(Language.StringByID(R.MyInternationalizationString.AddBindTargets)); + + // //璁惧閫夋嫨纭畾 + // form.ActionSelectDevice += (async (listDevice) => + // { + // if (listDevice.Count == 0) + // { + // return; + // } + + // var listNewDevice = await this.BindKeyDeviceTargets(key, listDevice,currentClusterID); + + // if (listNewDevice == null || listNewDevice.Count == 0) + // { + // return; + // } + + // foreach (CommonDevice device in listNewDevice) + // { + // string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + // this.dicEsixtDevice[mainKeys] = device; + + // Application.RunOnMainThread(() => + // { + // this.AddRowlayout(device); + // }); + // } + // }); + //} + + ///// <summary> + ///// 娣诲姞琛� + ///// </summary> + ///// <param name="device"></param> + //private void AddRowlayout(CommonDevice device) + //{ + // string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); + // this.dicEsixtDevice[mainKeys] = device; + + // var row = new DeviceRoomViewRow(this.listView, device); + // row.ChangedChidrenBindMode(row.btnIcon, ChidrenBindMode.BindEventOnly); + // row.ChangedChidrenBindMode(row.btnRoom, ChidrenBindMode.BindEventOnly); + // row.ChangedChidrenBindMode(row.btnDevie, ChidrenBindMode.BindEventOnly); + + // //鍒犻櫎 + // var btnDelete = new RowDeleteButton(); + // row.AddRightView(btnDelete); + // btnDelete.MouseUpEventHandler += (sender, e) => + // { + // //纭瑕佸垹闄ゅ悧锛� + // string msg = Language.StringByID(R.MyInternationalizationString.uShowDoDeleteMsg); + // this . ShowConfirmMsg(msg, "DeleteTargetDevice", device, row); + // }; + //} + } } -- Gitblit v1.8.0