From ff3cfcf62632bf43e51a6b6098c203bf0f5cddbc Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期二, 24 十二月 2019 19:53:29 +0800
Subject: [PATCH] 2019.12.24

---
 ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs |  362 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 250 insertions(+), 112 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs
index 7b118ad..7197147 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs
@@ -14,7 +14,11 @@
         /// <summary>
         /// 鍒楄〃鎺т欢
         /// </summary>
-        private VerticalFrameControl listView = null;
+        private VerticalFrameRefreshControl listView = null;
+        /// <summary>
+        /// 鍏ㄩ儴鐨勮
+        /// </summary>
+        private Dictionary<string, RowLayoutControl> dicAllRow = null;
 
         #endregion
 
@@ -28,40 +32,51 @@
             //璁剧疆澶撮儴淇℃伅
             base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uMessageCenter));
 
-            listView = new VerticalFrameControl(35);
-            listView.Height = bodyFrameLayout.Height;
-            bodyFrameLayout.AddChidren(listView);
-
             //鍒濆鍖栧彸涓婅鑿滃崟
             this.InitTopRightMenu();
 
+            listView = new VerticalFrameRefreshControl(35);
+            listView.Height = bodyFrameLayout.Height;
+            bodyFrameLayout.AddChidren(listView);
+            listView.BeginHeaderRefreshingAction += () =>
+            {
+                HdlThreadLogic.Current.RunThread(() =>
+                {
+                    //鍒濆鍖栦腑閮ㄤ俊鎭�
+                    this.InitMiddleData(false);
+                });
+            };
+
             HdlThreadLogic.Current.RunThread(() =>
             {
+                //鎵撳紑杩涘害鏉�
+                this.ShowProgressBar();
+
                 //鍒濆鍖栦腑閮ㄤ俊鎭�
-                this.InitMiddleData();
+                this.InitMiddleData(true);
             });
         }
 
         /// <summary>
         /// 鍒濆鍖栦腑閮ㄤ俊鎭�
         /// </summary>
-        private async void InitMiddleData()
+        private async void InitMiddleData(bool showReload)
         {
-            //鎵撳紑杩涘害鏉�
-            this.ShowProgressBar();
-            var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, "");
-            if (result == null)
+            //鑾峰彇鏁版嵁
+            var dicData = await this.GetMessageData();
+            //鍏抽棴杩涘害鏉�
+            this.CloseProgressBar(dicData == null && showReload == true ? ShowReLoadMode.YES : ShowReLoadMode.NO);
+
+            HdlThreadLogic.Current.RunMain(() =>
             {
-                //鍏抽棴杩涘害鏉�
-                this.CloseProgressBar(ShowReLoadMode.YES);
+                //鍏抽棴鍒锋柊鐗规晥
+                listView?.EndHeaderRefreshing();
+            });
+            if (dicData == null)
+            {
+                //鏁版嵁寮傚父
                 return;
             }
-            var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MessageRecordInfo>>(result);
-            //鍚堝苟鏁版嵁
-            var dicData = this.MergeMessageRecordData(dataInfo);
-            //鍏抽棴杩涘害鏉�
-            this.CloseProgressBar();
-            
             HdlThreadLogic.Current.RunMain(() =>
             {
                 //鍒濆鍖栦腑閮ㄦ帶浠�
@@ -75,36 +90,45 @@
         /// <param name="dicData"></param>
         private void InitMiddleFrame(Dictionary<string, List<MessageRecordInfo>> dicData)
         {
+            //娓呯┖
+            listView.RemoveAll();
+
+            int index = 0;
             foreach (var keys in dicData.Keys)
             {
                 var listData = dicData[keys];
-                HdlThreadLogic.Current.RunMain(() =>
+                index++;
+                //瀹瑰櫒
+                var framBack = new FrameListControl(23);
+                framBack.Name = index.ToString();
+                framBack.Height = Application.GetRealHeight(100);
+                framBack.BackgroundColor = UserCenterColor.Current.White;
+                listView.AddChidrenFrame(framBack);
+
+                //鏃ユ湡
+                string strMonth = Language.StringByID(R.MyInternationalizationString.Month);
+                string strDate = Language.StringByID(R.MyInternationalizationString.Day);
+                var frameDate = new FrameLayout();
+                frameDate.Height = Application.GetRealHeight(118);
+                framBack.AddChidren(frameDate);
+                var btnDate = new NormalViewControl(500, 60, true);
+                btnDate.TextSize = 15;
+                btnDate.X = ControlCommonResourse.XXLeft;
+                btnDate.Y = Application.GetRealHeight(35);
+                btnDate.Text = Convert.ToDateTime(listData[0].MsgTime).ToString("MM" + strMonth + "dd" + strDate);
+                frameDate.AddChidren(btnDate);
+
+                for (int i = 0; i < listData.Count; i++)
                 {
-                    //瀹瑰櫒
-                    var framBack = new FrameListControl(23);
-                    framBack.Name = keys;
-                    framBack.Height = Application.GetRealHeight(100);
-                    framBack.BackgroundColor = UserCenterColor.Current.White;
-
-                    //鏃ユ湡
-                    string strMonth = Language.StringByID(R.MyInternationalizationString.Month);
-                    string strDate = Language.StringByID(R.MyInternationalizationString.Day);
-                    var frameDate = new FrameLayout();
-                    frameDate.Height = Application.GetRealHeight(118);
-                    framBack.AddChidren(frameDate);
-                    var btnDate = new NormalViewControl(500, 60, true);
-                    btnDate.TextSize = 15;
-                    btnDate.X = ControlCommonResourse.XXLeft;
-                    btnDate.Y = Application.GetRealHeight(35);
-                    btnDate.Text = Convert.ToDateTime(listData[0].MsgTime).ToString("MM" + strMonth + "dd" + strDate);
-                    frameDate.AddChidren(btnDate);
-
-                    for (int i = 0; i < listData.Count; i++)
-                    {
-                        //娣诲姞淇℃伅琛�
-                        this.AddMsgRowControl(framBack, listData[i], i != listData.Count - 1);
-                    }
-                });
+                    //娣诲姞淇℃伅琛�
+                    this.AddMsgRowControl(framBack, listData[i], i != listData.Count - 1);
+                }
+                //璋冩暣楂樺害
+                listView.AdjustChidrenFrameHeight(framBack, Application.GetRealHeight(23));
+                if (index == dicData.Count)
+                {
+                    listView.AdjustTableHeight();
+                }
             }
         }
 
@@ -138,10 +162,14 @@
             //鍏ㄩ儴宸茶
             menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllRead), () =>
             {
+                //璁剧疆鍏ㄩ儴涓哄凡璇�
+                this.SetAllTickIsRead();
             });
             //鍏ㄩ儴鍒犻櫎
             menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllDelete), () =>
             {
+                //鍒犻櫎鍏ㄩ儴鐨勬秷鎭�
+                this.DeleteAllMsg();
             });
         }
 
@@ -159,14 +187,16 @@
         {
             var rowControl = new RowLayoutControl(frameList.rowSpace / 2);
             frameList.AddChidren(rowControl);
-           
+            rowControl.Name = frameList.ChildrenCount.ToString();
+            rowControl.MainKeys = recordInfo.Id;
+            this.dicAllRow[frameList.Name + "-" + rowControl.Name] = rowControl;
 
             //鍥炬爣(鐜板湪娴嬭瘯)
             var btnIcon = rowControl.frameTable.AddLeftIcon(81);
-            btnIcon.UnSelectedImagePath = "Item/Satety.png";
+            btnIcon.UnSelectedImagePath = "Item/Safety.png";
 
             //娑堟伅绫诲瀷
-            var btnMsgObject = rowControl.frameTable.AddLeftCaption("娴嬭瘯:娑堟伅绫诲瀷", 600);
+            var btnMsgObject = rowControl.frameTable.AddLeftCaption("鎶ヨ娑堟伅", 600);
             PicViewControl btnNewTip = null;
             if (recordInfo.IsRead == 0)
             {
@@ -180,7 +210,7 @@
             //娑堟伅
             var btnMsg = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 600, 60);
             btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
-            btnMsg.Y = Application.GetRealHeight(6) + rowControl.frameTable.chidrenYaxis;
+            btnMsg.Y = Application.GetRealHeight(5) + rowControl.frameTable.chidrenYaxis;
             rowControl.frameTable.AddChidren(btnMsg, ChidrenBindMode.BindEventOnly);
             //鏃堕棿
             var btnTime = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 200, 50);
@@ -207,15 +237,15 @@
             btnDelete.ButtonClickEvent += (sender, e) =>
             {
                 //纭鍒犻櫎娑堟伅?
-                string msg = Language.StringByID(R.MyInternationalizationString.uDeleteRoomMsg);
+                string msg = Language.StringByID(R.MyInternationalizationString.uDeleteMessageMsg);
                 this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
                 {
-                    await this.DeleteMsg(recordInfo.RegId, frameList, rowControl);
+                    await this.DeleteMsg(recordInfo.Id, frameList, rowControl);
                 });
             };
 
             //鐐瑰嚮
-            rowControl.frameTable.ButtonClickEvent += (sender, e) =>
+            rowControl.frameTable.ButtonClickEvent += async (sender, e) =>
             {
                 if (recordInfo.IsRead == 1)
                 {
@@ -228,8 +258,11 @@
                 //娑堟伅
                 btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
                 btnNewTip.RemoveFromParent();
-                //鏍囪宸茶(涓嶇瀹冩垚鍔熶笉鎴愬姛)
-                this.SetTickIsRead(recordInfo.RegId);
+                if (sender != null)
+                {
+                    //鏍囪宸茶(涓嶇瀹冩垚鍔熶笉鎴愬姛)
+                    await this.SetTickIsRead(recordInfo.Id);
+                }
             };
         }
 
@@ -241,10 +274,59 @@
         /// 鏍囪宸茶
         /// </summary>
         /// <param name="strId"></param>
-        private async void SetTickIsRead(string strId)
+        private async System.Threading.Tasks.Task<bool> SetTickIsRead(string strId)
         {
-            var pra = new { Id = strId };
-            //await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/TickIsRead", true, pra);
+            string strUrl = "ZigbeeUsers/TickIsRead?Id=" + strId;
+
+            var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET");
+            if (result == null)
+            {
+                return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/TickIsRead", null, null);
+            }
+            //浜戠鏄笉浼氳繑鍥炰笢瑗跨殑
+            return true;
+        }
+
+        /// <summary>
+        /// 璁剧疆鍏ㄩ儴涓哄凡璇�
+        /// </summary>
+        private void SetAllTickIsRead()
+        {
+            if (dicAllRow.Count == 0)
+            {
+                return;
+            }
+            //纭鏍囪鍏ㄩ儴娑堟伅涓哄凡璇�?
+            this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uUnTipAllMessageMsg), () =>
+            {
+                HdlThreadLogic.Current.RunThread(async () =>
+                {
+                    //鎵撳紑杩涘害鏉�
+                    this.ShowProgressBar();
+                    foreach (var contr in this.dicAllRow.Values)
+                    {
+                        //鏍囪瘑鍏ㄩ儴涓哄凡璇�
+                        var result = await this.SetTickIsRead(contr.MainKeys);
+                        if (result == false)
+                        {
+                            //鍏抽棴杩涘害鏉�
+                            this.CloseProgressBar();
+                            return;
+                        }
+                    }
+                    //鍏抽棴杩涘害鏉�
+                    this.CloseProgressBar();
+
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        //璁剧疆鍏ㄩ儴鐘舵��
+                        foreach (var contr in this.dicAllRow.Values)
+                        {
+                            contr.frameTable.ButtonClickEvent?.Invoke(null, null);
+                        }
+                    });
+                });
+            });
         }
 
         #endregion
@@ -259,19 +341,58 @@
         /// <param name="rowContr"></param>
         private async System.Threading.Tasks.Task<bool> DeleteMsg(string strId, FrameListControl frameList, RowLayoutControl rowContr)
         {
-            var pra = new { Id = strId };
-            //var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/DeletePushMessage", true, pra);
-            //if (result == true && frameList != null)
+            string strUrl = "ZigbeeUsers/DeletePushMessage?Id=" + strId;
+
+            var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET");
+            if (result == null)
+            {
+                return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/DeletePushMessage", null, null);
+            }
+            //浜戠鏄笉浼氳繑鍥炰笢瑗跨殑
+            if (frameList != null)
             {
                 HdlThreadLogic.Current.RunMain(() =>
                 {
-                    rowContr.RemoveFromParent();
+                    //绉婚櫎缂撳瓨
+                    this.dicAllRow.Remove(frameList.Name + "-" + rowContr.Name);
                     //璋冩暣鎺т欢浣嶇疆
-                    this.AdjustControlLocation(frameList);
+                    this.AdjustControlLocation(frameList, rowContr);
                 });
             }
-            //return result;
             return true;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鍏ㄩ儴鐨勬秷鎭�
+        /// </summary>
+        private void DeleteAllMsg()
+        {
+            if (dicAllRow.Count == 0)
+            {
+                return;
+            }
+            //纭鍒犻櫎鍏ㄩ儴娑堟伅?
+            this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uDeleteAllMessageMsg), () =>
+            {
+                HdlThreadLogic.Current.RunThread(async () =>
+                {
+                    //鎵撳紑杩涘害鏉�
+                    this.ShowProgressBar();
+                    foreach (var contr in this.dicAllRow.Values)
+                    {
+                        //鍒犻櫎鍏ㄩ儴娑堟伅
+                        var result = await this.DeleteMsg(contr.MainKeys, null, null);
+                        if (result == false)
+                        {
+                            //鍏抽棴杩涘害鏉�
+                            this.CloseProgressBar();
+                            return;
+                        }
+                    }
+                    //鍒濆鍖栦腑閮ㄤ俊鎭�
+                    this.InitMiddleData(true);
+                });
+            });
         }
 
         #endregion
@@ -282,25 +403,19 @@
         /// 璋冩暣鎺т欢浣嶇疆
         /// </summary>
         /// <param name="frameList"></param>
-        private void AdjustControlLocation(FrameListControl frameList)
+        private void AdjustControlLocation(FrameListControl frameList, RowLayoutControl removeRow)
         {
-            int nowHeight = frameList.Height;
-            int changedHeight = 0;
-            if (frameList.ChildrenCount <= 1)
+            int changedHeight = frameList.GetChildren(frameList.ChildrenCount - 1).Height;
+            if (frameList.ChildrenCount <= 2)
             {
                 //宸茬粡鍒犲畬浜�,鍙墿涓嬫爣棰樻棩鏈熶簡
-                frameList.RemoveFromParent();
-                changedHeight = nowHeight;
+                changedHeight = frameList.Height;
             }
-            else
-            {
-                frameList.Height = frameList.GetChildren(frameList.ChildrenCount - 1).Bottom;
-                changedHeight = nowHeight - frameList.Height;
-            }
+            //鍏堣皟鏁村悇鑷鍣ㄧ殑Y杞村潗鏍�
             bool canChangedLoaction = false;
-            for (int i = 0; i < this.listView.ChildrenCount; i++)
+            for (int i = 0; i < this.listView.frameTable.ChildrenCount; i++)
             {
-                var myView = this.listView.GetChildren(i);
+                var myView = this.listView.frameTable.GetChildren(i);
                 if (myView.Name == frameList.Name)
                 {
                     //瀹冧箣鍚庣殑鎺т欢鍏ㄩ儴寰�涓婄Щ鍔�
@@ -312,11 +427,61 @@
                     myView.Y -= changedHeight;
                 }
             }
+            //璋冩暣鐖跺鍣ㄥぇ灏�
+            this.listView.AdjustTableHeight();
+
+
+            if (frameList.ChildrenCount <= 2)
+            {
+                //宸茬粡鍒犲畬浜�,鍙墿涓嬫爣棰樻棩鏈熶簡
+                frameList.RemoveFromParent();
+            }
+            else
+            {
+                //杩欎釜瀹瑰櫒閲岄潰琚Щ闄ょ殑琛岀殑涓嬮潰鐨勫叏閮ㄨ,寰�涓婄Щ鍔�
+                bool changedFlage = false;
+                for (int i = 0; i < frameList.ChildrenCount; i++)
+                {
+                    var myView = frameList.GetChildren(i);
+                    if (myView.Name == removeRow.Name)
+                    {
+                        //瀹冧箣鍚庣殑鎺т欢鍏ㄩ儴寰�涓婄Щ鍔�
+                        changedFlage = true;
+                        continue;
+                    }
+                    if (changedFlage == true)
+                    {
+                        myView.Y -= changedHeight;
+                    }
+                }
+                //绉婚櫎鎸囧畾鐨勮
+                removeRow.RemoveFromParent();
+                //瀹瑰櫒澶у皬鍑忓皯
+                frameList.Height -= changedHeight;
+            }
         }
 
         #endregion
 
-        #region 鈻� 鍚堝苟鏁版嵁___________________________
+        #region 鈻� 鑾峰彇鏁版嵁___________________________
+
+        /// <summary>
+        /// 鑾峰彇娑堟伅璁板綍
+        /// </summary>
+        /// <returns></returns>
+        private async System.Threading.Tasks.Task<Dictionary<string, List<MessageRecordInfo>>> GetMessageData()
+        {
+            this.dicAllRow = new Dictionary<string, RowLayoutControl>();
+
+            var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, "");
+            if (result == null)
+            {
+                return null;
+            }
+            var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MessageRecordInfo>>(result);
+            //鍚堝苟鏁版嵁
+            return this.MergeMessageRecordData(dataInfo);
+        }
 
         /// <summary>
         /// 鍚堝苟鏁版嵁
@@ -345,46 +510,19 @@
                 var listData = dicTemp[listSortKeys[i]];
                 foreach (var data2 in listData)
                 {
-                    string[] myArry = data2.MsgTime.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
-                    if (dicData.ContainsKey(myArry[1]) == false)
+                    string[] myArry = data2.MsgTime.Split(new string[] { "T" }, StringSplitOptions.RemoveEmptyEntries);
+                    if (myArry.Length != 2)
                     {
-                        dicData[myArry[1]] = new List<MessageRecordInfo>();
+                        continue;
                     }
-                    dicData[myArry[1]].Add(data2);
+                    if (dicData.ContainsKey(myArry[0]) == false)
+                    {
+                        dicData[myArry[0]] = new List<MessageRecordInfo>();
+                    }
+                    dicData[myArry[0]].Add(data2);
                 }
             }
             return dicData;
-        }
-
-        #endregion
-
-        #region 鈻� 缁撴瀯浣揰____________________________
-
-        /// <summary>
-        /// 淇℃伅缁撴灉
-        /// </summary>
-        private class MessageRecordInfo
-        {
-            /// <summary>
-            /// 涓婚敭
-            /// </summary>
-            public string RegId = string.Empty;
-            /// <summary>
-            /// 娑堟伅鍐呭
-            /// </summary>
-            public string MsgContent = string.Empty;
-            /// <summary>
-            /// MsgType
-            /// </summary>
-            public string MsgType = string.Empty;
-            /// <summary>
-            /// 鏄惁宸茶
-            /// </summary>
-            public int IsRead = 0;
-            /// <summary>
-            /// 鏃堕棿 2019-09-10 13:11:55
-            /// </summary>
-            public string MsgTime = string.Empty;
         }
 
         #endregion

--
Gitblit v1.8.0