From c1de48884fa145a16a0f8bcee93274dcfaa0ff82 Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 07 五月 2020 10:40:28 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev-tzy' into dev-2020xm --- ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs | 491 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 491 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs new file mode 100755 index 0000000..fc4a6f3 --- /dev/null +++ b/ZigbeeApp/Shared/Phone/UserCenter/SharedContent/AddNewSharedListRoomForm.cs @@ -0,0 +1,491 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using ZigBee.Device; + +namespace Shared.Phone.UserCenter.SharedContent +{ + /// <summary> + /// 閰嶇疆鏂板叡浜唴瀹圭殑涓荤晫闈� + /// </summary> + public class AddNewSharedListRoomForm : EditorCommonForm + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鍒楄〃鎺т欢 + /// </summary> + private VerticalListControl listView = null; + /// <summary> + /// 鍒嗕韩鎸夐挳 + /// </summary> + private BottomClickButton btnShard = null; + /// <summary> + /// 鎴愬憳淇℃伅 + /// </summary> + private MemberInfoRes memberResult = null; + /// <summary> + /// 鎴愬憳鐨勫垎浜暟鎹� + /// </summary> + private MemberShardInfoData memberShardInfo = null; + /// <summary> + /// 閫夋嫨鐨勬埧闂� + /// </summary> + private Dictionary<string, Common.Room> dicSelectRoom = new Dictionary<string, Common.Room>(); + /// <summary> + /// 褰撳墠閫夋嫨鐨勬ゼ灞侷D + /// </summary> + private string nowSelectFloorId = string.Empty; + + #endregion + + #region 鈻� 鍒濆鍖朹____________________________ + + /// <summary> + /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓) + /// </summary> + /// <param name="i_memberResult">鎴愬憳淇℃伅</param> + /// <param name="i_memberShardInfo">鎴愬憳鐨勫叡浜俊鎭�</param> + public void ShowForm(MemberInfoRes i_memberResult, MemberShardInfoData i_memberShardInfo) + { + this.memberResult = i_memberResult; + this.memberShardInfo = i_memberShardInfo; + + //璁剧疆澶撮儴淇℃伅 + base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uAddShared)); + + //鍒濆鍖栧彸涓婅鐨勬帶浠� + this.InitTopRightMenuControl(); + + //鍒濆鍖栦腑閮ㄤ俊鎭� + this.InitMiddleFrame(); + } + + /// <summary> + /// 鍒濆鍖栦腑閮ㄤ俊鎭� + /// </summary> + private void InitMiddleFrame() + { + //娓呯┖bodyFrame + this.ClearBodyFrame(); + + var frameBack = new FrameLayout(); + frameBack.Height = Application.GetRealHeight(141); + frameBack.BackgroundColor = UserCenterColor.Current.White; + bodyFrameLayout.AddChidren(frameBack); + //鎴块棿鍒楄〃 + var btnTitle = new NormalViewControl(800, 60, true); + btnTitle.X = ControlCommonResourse.XXLeft; + btnTitle.Y = Application.GetRealHeight(52); + btnTitle.TextID = R.MyInternationalizationString.RoomList; + btnTitle.TextColor = UserCenterColor.Current.TextColor2; + btnTitle.TextSize = 15; + frameBack.AddChidren(btnTitle); + + this.listView = new VerticalListControl(29); + listView.Y = frameBack.Bottom; + listView.Height = bodyFrameLayout.Height - frameBack.Bottom; + listView.BackgroundColor = UserCenterColor.Current.White; + bodyFrameLayout.AddChidren(listView); + + this.btnShard = new BottomClickButton(); + btnShard.TextID = R.MyInternationalizationString.uShared2; + bodyFrameLayout.AddChidren(btnShard); + btnShard.Visible = false; + btnShard.ButtonClickEvent += (sender, e) => + { + var listRoom = new List<Common.Room>(); + foreach (var room in this.dicSelectRoom.Values) + { + listRoom.Add(room); + } + //鎵ц鍒嗕韩鎸囧畾鍖哄煙 + this.DoSharedContentByRoom(listRoom); + }; + + HdlThreadLogic.Current.RunThread(() => + { + //鍒濆鍖栧尯鍩熷垪琛� + this.InitAreaListRow(this.nowSelectFloorId); + }); + } + + /// <summary> + /// 鍒濆鍖栧彸涓婅鐨勬帶浠� + /// </summary> + private void InitTopRightMenuControl() + { + //鑾峰彇妤煎眰 + var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); + if (dicFloor.Count == 0) + { + return; + } + var btnIconContr = new MostRightIconControl(69, 69); + btnIconContr.UnSelectedImagePath = "Item/Drop_Down.png"; + topFrameLayout.AddChidren(btnIconContr); + btnIconContr.InitControl(); + + var btnFloor = new NormalViewControl(300, 69, true); + btnFloor.Gravity = Gravity.CenterVertical; + btnFloor.X = btnIconContr.X + btnIconContr.btnIcon.X - Application.GetRealWidth(300); + btnFloor.TextAlignment = TextAlignment.CenterRight; + topFrameLayout.AddChidren(btnFloor); + + foreach (var floorId in dicFloor.Keys) + { + //绗竴涓ゼ灞� + this.nowSelectFloorId = floorId; + btnFloor.Text = dicFloor[floorId]; + break; + } + + btnIconContr.ButtonClickEvent += (sender, e) => + { + //妤煎眰鑿滃崟 + var contr = new TopRightFloorMenuControl(dicFloor.Count, 2, Language.StringByID(R.MyInternationalizationString.SelectFloor)); + foreach (var floorId in dicFloor.Keys) + { + contr.AddRowMenu(floorId, () => + { + //璁板綍璧烽�夋嫨鐨処D + this.nowSelectFloorId = floorId; + btnFloor.Text = dicFloor[this.nowSelectFloorId]; + //鍒濆鍖栦腑閮ㄤ俊鎭� + this.InitMiddleFrame(); + }); + } + }; + } + + #endregion + + #region 鈻� 鍖哄煙鍒楄〃___________________________ + + /// <summary> + /// 鍒濆鍖栧尯鍩熷垪琛� + /// </summary> + /// <param name="floorId">妤煎眰ID</param> + private void InitAreaListRow(string floorId) + { + dicSelectRoom.Clear(); + var listRoom = HdlRoomLogic.Current.GetFloorSortRoom(floorId, false); + HdlThreadLogic.Current.RunMain(() => + { + var listDataRoom = new List<Common.Room>(); + for (int i = 0; i < listRoom.Count; i++) + { + //妫�娴嬭兘鍚︽樉绀鸿鎴块棿 + if (this.CheckCanShowRow(listRoom[i]) == true) + { + listDataRoom.Add(listRoom[i]); + } + } + for (int i = 0; i < listDataRoom.Count; i++) + { + //娣诲姞鎴块棿琛� + this.AddRoomRow(listDataRoom[i], i != listDataRoom.Count - 1); + } + + //璋冩暣鐪熷疄楂樺害 + listView.AdjustRealHeight(Application.GetRealHeight(23)); + if (listView.Y + listView.Height > btnShard.Y) + { + //褰撹繖涓垪琛ㄦ帶浠剁殑楂樺害宸茬粡瓒呰繃浜嗐�愬垎浜寜閽�戞椂,灏嗗畠鐨勯珮搴︾洿鎺ユ墿澶у埌鏈�澶у寲 + listView.RecoverHeight(); + //鐒跺悗鍐嶆坊鍔犱竴涓┖鐧界殑鎺т欢,淇冧娇瀹冭兘澶熷悜涓婃粦鍔� + var frameTemp = new FrameLayout(); + frameTemp.Height = bodyFrameLayout.Height - btnShard.Y; + listView.AddChidren(frameTemp); + } + if (listDataRoom.Count == 0) + { + //濡傛灉娌℃湁鑳藉鍏变韩鐨勬埧闂� + bodyFrameLayout.RemoveAll(); + //鏃犲彲鍏变韩鐨勬埧闂� + this.ShowNotDataImage(bodyFrameLayout, Language.StringByID(R.MyInternationalizationString.uNotCanShardRoomMsg), "Item/NotShardPic.png", 383, 279); + } + }); + } + + /// <summary> + /// 娣诲姞鎴块棿琛� + /// </summary> + /// <param name="room"></param> + /// <param name="addLine"></param> + private void AddRoomRow(Common.Room room, bool addLine) + { + var row = new FrameRowControl(listView.rowSpace / 2); + row.MainKeys = room.Id; + listView.AddChidren(row); + //鍥炬爣 + var btnIcon = row.AddLeftIcon(81); + btnIcon.UnSelectedImagePath = "Item/RoomIconSelected.png"; + //鎴块棿鍚� + var btnName = row.AddLeftCaption(room.Name, 650); + btnName.TextSize = 15; + if (addLine == true) + { + //搴曠嚎 + row.AddBottomLine(); + } + row.ButtonClickEvent += (sender, e) => + { + var form = new AddNewSharedContentForm(); + form.AddForm(room, memberShardInfo); + }; + + //閫夋嫨 + var btnSelect = row.AddMostRightEmptyIcon(69, 69); + btnSelect.UnSelectedImagePath = "Item/ItemUnSelected.png"; + btnSelect.SelectedImagePath = "Item/ItemSelected.png"; + row.ChangedChidrenBindMode(btnSelect, ChidrenBindMode.NotBind); + btnSelect.ButtonClickEvent += (sender, e) => + { + if (btnSelect.IsSelected == true) + { + btnSelect.IsSelected = false; + dicSelectRoom.Remove(room.Id); + if (dicSelectRoom.Count == 0) + { + btnShard.Visible = false; + } + } + else + { + btnSelect.IsSelected = true; + dicSelectRoom[room.Id] = room; + if (btnShard.Visible == false) + { + btnShard.Visible = true; + } + } + }; + } + + #endregion + + #region 鈻� 鍒嗕韩鎸囧畾鍖哄煙_______________________ + + /// <summary> + /// 鎵ц鍒嗕韩鎸囧畾鍖哄煙 + /// </summary> + /// <param name="room">鎸囧畾瑕佸垎浜殑鎴块棿</param> + public void DoSharedContentByRoom(List<Common.Room> listRoom) + { + //鑾峰彇闇�瑕佷笂浼犵殑璁惧(鎸夋埧闂碙ist椤哄簭鍒嗙粍) + var dicDevice = new Dictionary<int, List<CommonDevice>>(); + //鑾峰彇闇�瑕佷笂浼犵殑鍦烘櫙,杩欎釜涓滆タ涓嶈鑾峰彇瀹冪殑缁戝畾鐩爣(鎸夋埧闂碙ist椤哄簭鍒嗙粍) + var dicScene = new Dictionary<int, List<Common.SceneUI>>(); + //鑾峰彇闇�瑕佷笂浼犵殑鎴块棿鏁版嵁 + int fileCount = this.GetUpLoadRoomData(listRoom, dicDevice, dicScene); + + var listCheckFile = new HashSet<string>(); + HdlThreadLogic.Current.RunThread(async () => + { + //鎵撳紑杩涘害鏉� + this.ShowProgressBar(); + + for (int index = 0; index < listRoom.Count; index++) + { + //鎵ц涓婁紶 + var result = await HdlShardLogic.Current.DoUploadSharedContent(memberShardInfo, listRoom[index], dicDevice[index], dicScene[index], fileCount, listCheckFile); + if (result == false) + { + break; + } + } + //鍏抽棴杩涘害鏉� + this.CloseProgressBar(); + + //涓嶇鎴愬姛杩樻槸澶辫触,閮藉埛鏂扮晫闈� + Application.RunOnMainThread(() => + { + if (this.Parent != null) + { + //閲嶆柊鍒锋柊鐣岄潰 + this.InitMiddleFrame(); + } + }); + }); + } + + /// <summary> + /// 鑾峰彇闇�瑕佷笂浼犵殑鎴块棿鏁版嵁 + /// </summary> + /// <param name="listRoom">闇�瑕佷笂浼犵殑鎴块棿鍒楄〃</param> + /// <param name="dicDevice">鑾峰彇闇�瑕佷笂浼犵殑璁惧(鎸夋埧闂碙ist椤哄簭鍒嗙粍)</param> + /// <param name="dicScene">鑾峰彇闇�瑕佷笂浼犵殑鍦烘櫙,杩欎釜涓滆タ涓嶈鑾峰彇瀹冪殑缁戝畾鐩爣(鎸夋埧闂碙ist椤哄簭鍒嗙粍)</param> + /// <returns></returns> + private int GetUpLoadRoomData(List<Common.Room> listRoom, Dictionary<int, List<CommonDevice>> dicDevice, Dictionary<int, List<Common.SceneUI>> dicScene) + { + var listAllFile = new HashSet<string>(); + for (int i = 0; i < listRoom.Count; i++) + { + //鎸夋埧闂碙ist椤哄簭鍒嗙粍鐨勮澶囧垪琛� + var listDevice = new List<CommonDevice>(); + dicDevice[i] = listDevice; + //鎸夋埧闂碙ist椤哄簭鍒嗙粍鐨勫満鏅垪琛� + var listScene = new List<Common.SceneUI>(); + dicScene[i] = listScene; + + //鑾峰彇鎴块棿鍏ㄩ儴璁惧 + foreach (var deviceKeys in listRoom[i].ListDevice) + { + var device = Common.LocalDevice.Current.GetDevice(deviceKeys); + if (device == null || memberShardInfo.dicAllShardKeys.ContainsKey(device.FilePath) == true) + { + //寮傚父 + continue; + } + string deviceFile = device.FilePath; + if (memberShardInfo.dicAllShardKeys.ContainsKey(deviceFile) == false) + { + //鎴栬�呭凡缁忓垎浜簡鐨勶紝涓嶅啀鏄剧ず + listDevice.Add(device); + if (listAllFile.Contains(deviceFile) == false) + { + listAllFile.Add(deviceFile); + } + } + } + + //鑾峰彇鍦烘櫙閲岄潰宓屽鐨勫瓙璁惧鍜屽瓙鍦烘櫙(璁$畻鎬绘暟鐢�) + var listCheck = new HashSet<string>(); + var listChirdDevice = new List<CommonDevice>(); + var listChirdScene = new List<Common.SceneUI>(); + //鑾峰彇鎴块棿鍏ㄩ儴鍦烘櫙 + foreach (var sceneId in listRoom[i].ListSceneId) + { + var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId); + if (sceneUi == null || memberShardInfo.dicAllShardKeys.ContainsKey(sceneUi.FileName) == true) + { + //寮傚父锛屾垨鑰呭凡缁忓垎浜簡鐨勶紝涓嶅啀鏄剧ず + continue; + } + listScene.Add(sceneUi); + //浠庣紦瀛樿幏鍙栧満鏅殑鎵ц鐩爣(杩欎釜鍑芥暟鏄绠楁�绘暟鐢�) + HdlShardLogic.Current.GetSceneDeviceList(sceneUi, listCheck, listChirdScene, listChirdDevice); + if (listAllFile.Contains(sceneUi.FileName) == false) + { + listAllFile.Add(sceneUi.FileName); + } + } + foreach (var device in listChirdDevice) + { + //宓屽瀛愯澶囩殑鏂囦欢鍚嶅瓧(璁$畻鎬绘暟鐢�) + string deviceFile = device.FilePath; + if (listAllFile.Contains(deviceFile) == false) + { + listAllFile.Add(deviceFile); + } + } + foreach (var secene in listChirdScene) + { + //宓屽瀛愬満鏅殑鏂囦欢鍚嶅瓧(璁$畻鎬绘暟鐢�) + if (listAllFile.Contains(secene.FileName) == false) + { + listAllFile.Add(secene.FileName); + } + } + //鎴块棿鏂囦欢 + listAllFile.Add(listRoom[i].FileName); + } + //濡傛灉鏈夋ゼ灞傜殑璇� + if (Common.Config.Instance.Home.FloorDics.Count > 0) + { + return listAllFile.Count + 1; + } + return listAllFile.Count; + } + + #endregion + + #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________ + + /// <summary> + /// 鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠� + /// </summary> + public override int FormActionAgainEvent() + { + //閲嶆柊鍒锋柊鐣岄潰 + this.InitMiddleFrame(); + return 1; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 妫�娴嬭鎴块棿鑳藉惁鏄剧ず + /// </summary> + /// <param name="room"></param> + /// <returns></returns> + private bool CheckCanShowRow(Common.Room room) + { + if (room.ListDevice.Count == 0 && room.ListSceneId.Count == 0) + { + return false; + } + if (room.IsLove == true) + { + return false; + } + if (memberShardInfo.dicShardRoom.ContainsKey(room.FileName) == false) + { + //娌℃湁杩欎釜鎴块棿 + return true; + } + foreach (var deviceKeys in room.ListDevice) + { + var device = Common.LocalDevice.Current.GetDevice(deviceKeys); + if (device == null) + { + continue; + } + if (memberShardInfo.dicAllShardKeys.ContainsKey(device.FilePath) == false) + { + //瀛樺湪鏈垎浜殑璁惧鐨勮瘽锛屾鎴块棿鍙互鏄剧ず + return true; + } + } + foreach (var sceneId in room.ListSceneId) + { + var sceneUi = HdlSceneLogic.Current.GetSceneUIBySceneId(sceneId); + if (sceneUi == null) + { + continue; + } + if (memberShardInfo.dicAllShardKeys.ContainsKey(sceneUi.FileName) == false) + { + //瀛樺湪鏈垎浜殑鍦烘櫙鐨勮瘽锛屾鎴块棿鍙互鏄剧ず + return true; + } + } + return false; + } + + #endregion + + #region 鈻� 缁撴瀯浣揰____________________________ + + /// <summary> + /// 鎺ユ敹鍒嗕韩鏁版嵁 + /// </summary> + private class MemberShardInfoResult + { + /// <summary> + /// 鏂囦欢鍚嶅瓧 + /// </summary> + public string ShareName = string.Empty; + /// <summary> + /// 涓婚敭 + /// </summary> + public string DistributedMark = string.Empty; + } + + #endregion + } +} -- Gitblit v1.8.0