From 4dce704aaf8587cf3f91cf88f2208315a03c4cbb Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期三, 08 四月 2020 13:54:58 +0800
Subject: [PATCH] 先上传一个版本

---
 ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs |  225 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 153 insertions(+), 72 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
index faf2482..c309fd3 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
@@ -42,9 +42,13 @@
         /// </summary>
         private List<int> listSearchLockId = new List<int>() { -1 };
         /// <summary>
-        /// 鍏朵粬娑堟伅鐨勪富閿�
+        /// 鍏朵粬娑堟伅鐨勪富閿�,瀹冨瓨鍦ㄥ彟澶栫殑涓�寮犳暟鎹簱琛ㄤ腑
         /// </summary>
-        private List<string> listOtherId = new List<string>();
+        private List<string> listOtherMsgId = new List<string>();
+        /// <summary>
+        /// 鏃犳硶璇嗗埆鐨勫紑閿佽褰曠殑鐢ㄦ埛ID(鍥犱负閭d釜瀵嗙爜鏈夊彲鑳芥病鏈夊垎閰嶇粰鎴愬憳)
+        /// </summary>
+        private List<string> listOtherUserId = new List<string>();
 
         #endregion
 
@@ -80,8 +84,11 @@
                     //纭娓呯┖褰撳墠璁板綍锛�
                     this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uConfirmClearNowLog), () =>
                     {
-                        //娓呯┖鎵�鏈夎褰�
-                        this.ClearAllHistoryLog();
+                        HdlThreadLogic.Current.RunThread(() =>
+                        {
+                            //娓呯┖鎵�鏈夎褰�
+                            this.ClearAllHistoryLog();
+                        });
                     });
                 });
             };
@@ -383,7 +390,7 @@
 
             //浜虹墿
             string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
-            var btnpersion = frameTable.AddBottomView(perName, 600);
+            frameTable.AddBottomView(perName, 600);
 
             //鏃堕棿
             if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
@@ -445,40 +452,117 @@
             //鑾峰彇璁块棶浜戠鎺ュ彛鐨勫惎鍔ㄥ弬鏁�
             var pra = this.GetDbInterfacePra();
 
-            int nowPage = 0;
+            //娓呯┖涓婁竴娆$殑鍏朵粬ID
+            this.listOtherMsgId = new List<string>();
+            this.listOtherUserId = new List<string>();
+
+            //鍏ㄩ儴鎴愬憳淇℃伅
+            var dicMemberName = new Dictionary<string, string>();
+            for (int i = 0; i < listMenberInfo.Count; i++)
+            {
+                dicMemberName.Add(listMenberInfo[i].SubAccountDistributedMark, string.IsNullOrEmpty(listMenberInfo[i].UserName) == false ? listMenberInfo[i].UserName : listMenberInfo[i].Account);
+            }
+
+            //鑾峰彇闂ㄩ攣鐨勬墦寮�鍜屽叧闂褰�
+            var listAllLog = await this.GetDoorOpenHistoryLog(pra, dicMemberName);
+            //鑾峰彇闂ㄩ攣鐨勫叾浠栬褰�
+            var listOtherLog = await this.GetDoorOtherHistoryLog(pra.UnlockTimeBegin, pra.UnlockTimeEnd);
+            listAllLog.AddRange(listOtherLog);
+
+            //鎺掑簭涓�涓�
+            var dicAllData = new Dictionary<string, List<HistoryInfo>>();
+            var listSortTime = new List<string>();
+            //鏄惁鍖呭惈鍏朵粬
+            bool getOtherFlage = this.listSearchUserId.Contains("");
+            foreach (var data in listAllLog)
+            {
+                //濡傛灉鍗曠嫭鎸囧畾鏈夎璐﹀彿,鍙互鏄剧ず
+                if (this.listSearchUserId.Contains(data.CloudAccountId) == false)
+                {
+                    //濡傛灉杩欎釜璐﹀彿娌℃湁鎸囧畾,骞朵笖鎸囧畾鏄剧ず鍏朵粬鐨勮瘽,骞朵笖鏃犳硶璇嗗埆杩欎釜鐢ㄦ埛ID鎵嶆樉绀�
+                    if (getOtherFlage == true && dicMemberName.ContainsKey(data.CloudAccountId) == true)
+                    {
+                        continue;
+                    }
+                }
+                //鎸夋椂闂村垎缁�
+                if (dicAllData.ContainsKey(data.UnlockTime) == false)
+                {
+                    dicAllData[data.UnlockTime] = new List<HistoryInfo>();
+                    listSortTime.Add(data.UnlockTime);
+                }
+                dicAllData[data.UnlockTime].Add(data);
+            }
+
+            //鎵ц鎺掑簭,鏃堕棿澶х殑鍦ㄥ墠闈�
+            listSortTime.Sort();
+            var listSortLog = new List<HistoryInfo>();
+            for (int i = listSortTime.Count - 1; i >= 0; i--)
+            {
+                listSortLog.AddRange(dicAllData[listSortTime[i]]);
+            }
+
+            return listSortLog;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣鐨勬墦寮�鍜屽叧闂褰�
+        /// </summary>
+        /// <param name="i_pra"></param>
+        /// <returns></returns>
+        private async Task<List<HistoryInfo>> GetDoorOpenHistoryLog(GetHistoryDataPra i_pra, Dictionary<string, string> dicMemberName)
+        {
             var listLog = new List<HistoryInfo>();
+
+            int nowPage = 0;
             while (true)
             {
                 //璁块棶浜戠
-                var result = await UserCenterLogic.GetResponseDataByRequestHttps("DoorLock/GetDoorLockHistoryPager", true, pra);
+                var result = await UserCenterLogic.GetResponseDataByRequestHttps("DoorLock/GetDoorLockHistoryPager", true, i_pra);
                 if (result == null)
                 {
                     return null;
                 }
                 var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetHistoryDataResult>(result);
-                listLog.AddRange(dataInfo.PageData);
+                foreach (var data in dataInfo.PageData)
+                {
+                    if (dicMemberName.ContainsKey(data.CloudAccountId) == false
+                        && this.listOtherUserId.Contains(data.CloudAccountId) == false)
+                    {
+                        //鏀堕泦鏃犳硶璇嗗埆鐨勭敤鎴稩D
+                        this.listOtherUserId.Add(data.CloudAccountId);
+                    }
+                    listLog.Add(data);
+                }
+
                 if (dataInfo.HasNextPage == false)
                 {
                     break;
                 }
                 //鑾峰彇涓嬩竴椤�
                 nowPage++;
-                pra.PageSetting.Page = nowPage;
+                i_pra.PageSetting.Page = nowPage;
             }
 
-            //鎺掑簭涓�涓�
-            var dic = new Dictionary<string, List<HistoryInfo>>();
-            var listSort = new List<string>();
-            //娓呯┖涓婁竴娆$殑鍏朵粬ID
-            this.listOtherId = new List<string>();
+            return listLog;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣鐨勫叾浠栬褰�
+        /// </summary>
+        /// <returns></returns>
+        private async Task<List<HistoryInfo>> GetDoorOtherHistoryLog(string beginTime, string endTime)
+        {
+            var listLog = new List<HistoryInfo>();
+
             //鏄惁鍖呭惈鍏朵粬
-            bool flage = this.listSearchUserId.Contains("") || this.listSearchUserId.Contains("-1");
-            if (flage == true)
+            bool getOtherFlage = this.listSearchUserId.Contains("") || this.listSearchUserId.Contains("-1");
+            if (getOtherFlage == true)
             {
                 //鍘昏幏鍙栧叾浠栦俊鎭�
                 var pra2 = new MessageInfoPra();
-                pra2.BeginTime = pra.UnlockTimeBegin;
-                pra2.EndTime = pra.UnlockTimeEnd;
+                pra2.BeginTime = beginTime;
+                pra2.EndTime = endTime;
                 pra2.Topic = "/Alarms/SendAlarmInform";
                 pra2.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                 var result = await UserCenterLogic.GetResponseDataByRequestHttps("MessageCenter/GetMessageCenterPagger", true, pra2);
@@ -487,53 +571,34 @@
                     return null;
                 }
                 var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject<MessageCentetInfo>(result);
+                string doorKey = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
                 foreach (var myInfo in dataInfo2.PageData)
                 {
-                    var data = new HistoryInfo();
-                    if (dic.ContainsKey(myInfo.CreatedOnUtc) == false)
-                    {
-                        dic[myInfo.CreatedOnUtc] = new List<HistoryInfo>();
-                        listSort.Add(myInfo.CreatedOnUtc);
-                    }
-                  
                     //璁惧瀵硅薄
                     var jobject = Newtonsoft.Json.Linq.JObject.Parse(myInfo.PayloadJson);
-                    data.DeviceMac = jobject.Value<string>("DeviceAddr");
-                    data.DeviceEpoint = jobject.Value<int>("Epoint");
+                    string deviceAddr = jobject.Value<string>("DeviceAddr");
+                    int deviceEpoint = jobject.Value<int>("Epoint");
+                    if (doorKey != deviceAddr + "_" + deviceEpoint)
+                    {
+                        //涓嶆槸鍚屼竴涓棬閿佺殑璁板綍
+                        continue;
+                    }
+
+                    var data = new HistoryInfo();
+                    data.DeviceMac = deviceAddr;
+                    data.DeviceEpoint = deviceEpoint;
                     //娑堟伅
                     var msgInfo = HdlAlarmsLogic.Current.GetDoorLockAlarmInfo(jobject);
                     data.AlarmMsg = msgInfo != null ? msgInfo.AlarmMsg : Language.StringByID(R.MyInternationalizationString.uDoorLocksAlarmHadTriggered);
-                    dic[myInfo.CreatedOnUtc].Add(data);
                     //鏃堕棿
                     data.UnlockTime = myInfo.CreatedOnUtc;
 
-                    this.listOtherId.Add(myInfo.Id);
+                    listLog.Add(data);
+                    this.listOtherMsgId.Add(myInfo.Id);
                 }
-            }
-            foreach (var data in listLog)
-            {
-                if (flage == false && string.IsNullOrEmpty(data.CloudAccountId) == true)
-                {
-                    //娌℃湁鎸囧畾鏄剧ず鍏朵粬
-                    continue;
-                }
-                if (dic.ContainsKey(data.UnlockTime) == false)
-                {
-                    dic[data.UnlockTime] = new List<HistoryInfo>();
-                    listSort.Add(data.UnlockTime);
-                }
-                dic[data.UnlockTime].Add(data);
             }
 
-            //鎵ц鎺掑簭,鏃堕棿澶х殑鍦ㄥ墠闈�
-            listSort.Sort();
-            var listSortLog = new List<HistoryInfo>();
-            for (int i = listSort.Count - 1; i >= 0; i--)
-            {
-                listSortLog.AddRange(dic[listSort[i]]);
-            }
-
-            return listSortLog;
+            return listLog;
         }
 
         #endregion
@@ -547,8 +612,27 @@
         {
             //鑾峰彇璁块棶浜戠鎺ュ彛鐨勫惎鍔ㄥ弬鏁�
             var pra = this.GetDbInterfacePra();
+            if (listSearchUserId.Contains("") == true)
+            {
+                //濡傛灉鎸囧畾鏈夊叾浠�,鍒欑敤鎴稩D閲嶆柊璁剧疆
+                pra.CloudAccountIdArr = new List<string>();
+                pra.CloudAccountIdArr.AddRange(listSearchUserId);
+                pra.CloudAccountIdArr.Remove("");
+                if (this.listOtherUserId.Count > 0)
+                {
+                    pra.CloudAccountIdArr.AddRange(listOtherUserId);
+                }
+                else
+                {
+                    //杩欎竴姝ュ緢閲嶈,涓嶇劧鏈夊彲鑳藉崟鐙�夋嫨鍏朵粬鐨勬椂鍊�
+                    //鍦ㄦ病鏈夋暟鎹殑鎯呭喌涓�,浼氭竻绌烘帀鍏ㄩ儴鐨勬暟鎹�
+                    pra.CloudAccountIdArr.Add("other");
+                }
+            }
+
             //鎵撳紑杩涘害鏉�
             this.ShowProgressBar();
+
             var result = await UserCenterLogic.GetResultStatuByRequestHttps("DoorLock/ClearDoorLockHistory", true, pra);
             if (result == false)
             {
@@ -556,13 +640,13 @@
             }
 
             //鍒犻櫎鍏朵粬娑堟伅
-            if (listOtherId.Count > 0)
+            if (listOtherMsgId.Count > 0)
             {
                 var pra2 = new MessageReadStatuPra();
                 pra2.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
-                for (int i = 0; i < listOtherId.Count; i++)
+                for (int i = 0; i < listOtherMsgId.Count; i++)
                 {
-                    pra2.Id = listOtherId[i];
+                    pra2.Id = listOtherMsgId[i];
                     result = await UserCenterLogic.GetResultStatuByRequestHttps("MessageCenter/DelMessageCenterItem", true, pra2);
                     if (result == false)
                     {
@@ -576,11 +660,14 @@
             {
                 return;
             }
-            this.listView.frameTable.RemoveAll();
-            listView.frameTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(115 - 3);
 
             //娓呯┖
-            this.listOtherId = new List<string>();
+            this.listOtherMsgId = new List<string>();
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                this.listView.frameTable.RemoveAll();
+                listView.frameTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(115 - 3);
+            });
         }
 
         #endregion
@@ -596,23 +683,16 @@
             DateTime dateFrom = new DateTime(dateFromControl.Year, dateFromControl.Month, dateFromControl.Day, 0, 0, 0);
             DateTime dateTo = new DateTime(dateToControl.Year, dateToControl.Month, dateToControl.Day, 23, 59, 59);
 
-            List<string> listUser = new List<string>();
-            if (listSearchUserId.Count == 1 && listSearchUserId[0] == "")
+            List<string> listUser = null;
+            //涓�鏃︽寚瀹氫簡鍏朵粬,鍒欓渶瑕佸叏閮ㄨ鍙�,鍥犱负鏈変簺寮�閿侊紝瀹冪敤鐨勫瘑鐮佸苟娌℃湁鍒嗛厤缁欐垚鍛�
+            if (listSearchUserId.Contains("-1") == true || listSearchUserId.Contains("") == true)
             {
-                //濡傛灉鍗曠函鐨勫彧鏄�夋嫨鍏朵粬,鍒欒妫�绱㈡潯浠朵笉鎴愮珛鍗冲彲
-                listUser.Add("鍏朵粬");
-            }
-            else if (listSearchUserId.Contains("-1") == true)
-            {
-                //鍏ㄩ��
-                for (int i = 0; i < listMenberInfo.Count; i++)
-                {
-                    listUser.Add(listMenberInfo[i].SubAccountDistributedMark);
-                }
+                //鍏ㄩ�夊嵆涓篘ull
             }
             else
             {
                 //鎸囧畾鐢ㄦ埛
+                listUser = new List<string>();
                 listUser.AddRange(listSearchUserId);
                 //绉婚櫎鍏朵粬,鍥犱负浜戠鍥哄畾浼氱粰
                 listUser.Remove("");
@@ -627,12 +707,13 @@
             }
 
             var pra = new GetHistoryDataPra();
+            pra.UnlockTimeBegin = dateFrom.ToUniversalTime().ToString();
+            pra.UnlockTimeEnd = dateTo.ToUniversalTime().ToString();
             pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
             pra.DoorLockId = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
             pra.CloudAccountIdArr = listUser;
             pra.OpenLockModeArr = listLock;
-            pra.UnlockTimeBegin = dateFrom.ToUniversalTime().ToString(); 
-            pra.UnlockTimeEnd = dateTo.ToUniversalTime().ToString();
+
             return pra;
         }
 

--
Gitblit v1.8.0