gxc
2019-12-25 944b87b6bcccb095cd73f13f4410fb20faf48f74
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