HDL Home App 第二版本 旧平台金堂用 正在使用
hxb
2022-08-30 25429f085093d89d543a0b90e30d0d62d1b7dac9
ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DeviceDoorLock
@@ -49,10 +48,6 @@
        /// 其他消息的主键,它存在另外的一张数据库表中
        /// </summary>
        private List<string> listOtherMsgId = new List<string>();
        /// <summary>
        /// 无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
        /// </summary>
        private List<string> listOtherUserId = new List<string>();
        #endregion
@@ -69,33 +64,37 @@
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uHistoryLog));
            //删除
            var btnDelete = new MostRightIconControl(69, 69);
            btnDelete.UnSelectedImagePath = "Item/DeleteIcon2Selected.png";
            topFrameLayout.AddChidren(btnDelete);
            btnDelete.InitControl();
            btnDelete.ButtonClickEvent += (sender, e) =>
            //成员不允许清空记录
            if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
            {
                var form = new TopRightMenuControl(1, 2);
                //清空记录
                form.AddRowMenu(Language.StringByID(R.MyInternationalizationString.uClearLog), "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
                //删除
                var btnDelete = new MostRightIconControl(69, 69);
                btnDelete.UnSelectedImagePath = "Item/DeleteIcon2Selected.png";
                topFrameLayout.AddChidren(btnDelete);
                btnDelete.InitControl();
                btnDelete.ButtonClickEvent += (sender, e) =>
                {
                    if (this.listView.frameTable.ChildrenCount == 0)
                    var form = new TopRightMenuControl(1, 2);
                    //清空记录
                    form.AddRowMenu(Language.StringByID(R.MyInternationalizationString.uClearLog), "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
                    {
                        //无数据可删
                        return;
                    }
                    //确认清空当前记录?
                    this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uConfirmClearNowLog), () =>
                    {
                        HdlThreadLogic.Current.RunThread(() =>
                        if (this.listView.frameTable.ChildrenCount == 0)
                        {
                            //清空所有记录
                            this.ClearAllHistoryLog();
                            //无数据可删
                            return;
                        }
                        //确认清空当前记录?
                        this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uConfirmClearNowLog), () =>
                        {
                            HdlThreadLogic.Current.RunThread(() =>
                            {
                                //清空所有记录
                                this.ClearAllHistoryLog();
                            });
                        });
                    });
                });
            };
                };
            }
            //初始化中部信息
            this.InitMiddleFrame();
@@ -223,12 +222,12 @@
                this.listHistoryInfo = null;
            }
            HdlThreadLogic.Current.RunThread(async () =>
            HdlThreadLogic.Current.RunThread(() =>
            {
                //打开进度条
                this.ShowProgressBar();
                //成员列表
                var result = await this.GetMemberListInfo();
                var result = this.GetMemberListInfo();
                if (result == false)
                {
                    //关闭进度条
@@ -242,7 +241,7 @@
                    dicMemberName.Add(listMenberInfo[i].SubAccountDistributedMark, string.IsNullOrEmpty(listMenberInfo[i].UserName) == false ? listMenberInfo[i].UserName : listMenberInfo[i].Account);
                }
                //历史记录
                var historyLog = await this.GetHistoryLogInfo(dicMemberName);
                var historyLog = this.GetHistoryLogInfo(dicMemberName);
                if (historyLog == null)
                {
                    //关闭进度条
@@ -276,7 +275,7 @@
        /// 获取成员列表信息
        /// </summary>
        /// <returns></returns>
        private async Task<bool> GetMemberListInfo()
        private bool GetMemberListInfo()
        {
            if (listMenberInfo != null)
            {
@@ -299,8 +298,8 @@
            }
            var pra = new MemberListInfoPra();
            string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
            if (result == null)
            string result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
            if (string.IsNullOrEmpty(result) == true)
            {
                return false;
            }
@@ -332,83 +331,14 @@
        {
            var frameTable = new FrameRowControl(listView.rowSpace / 2);
            frameTable.UseClickStatu = false;
            this.listView.AddChidrenFrame2(frameTable);
            this.listView.AddChidren2(frameTable);
            //图标
            var btnIcon = frameTable.AddLeftIcon();
            if (historyInfo.OpenLockMode == -1)
            {
                //其他消息
                var device = Common.LocalDevice.Current.GetDevice(historyInfo.DeviceMac, historyInfo.DeviceEpoint);
                if (device == null)
                {
                    btnIcon.UnSelectedImagePath = "Device/IntelligentLocks.png";
                }
                else
                {
                    Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device);
                }
            }
            else if (historyInfo.OpenLockMode == 9000)
            {
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
            }
            else if (historyInfo.UnlockIsSuccess == true)
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
            }
            else
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
            }
            //信息
            var btnMsg = frameTable.AddTopView("", 600);
            if (historyInfo.OpenLockMode == -1 || historyInfo.OpenLockMode == 9000)
            {
                //其他消息
                btnMsg.Text = historyInfo.AlarmMsg;
            }
            else if (historyInfo.UnlockIsSuccess == true)
            {
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByPasswordSuccess;
                }
                else if (historyInfo.OpenLockMode == 3)
                {
                    //IC卡开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByICcardSuccess;
                }
                else if (historyInfo.OpenLockMode == 15)
                {
                    //指纹开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintSuccess;
                }
            }
            else
            {
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByPasswordFail;
                }
                else if (historyInfo.OpenLockMode == 3)
                {
                    //IC卡开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByICcardFail;
                }
                else if (historyInfo.OpenLockMode == 15)
                {
                    //指纹开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintFail;
                }
            }
            //人物
            string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
            frameTable.AddBottomView(perName, 600);
            //时间
            if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
            {
@@ -420,11 +350,124 @@
                //如果日期范围不一样,则显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("yyyy/MM/dd HH:mm:ss"), 700);
            }
            //底线
            if (addLine == true)
            {
                //底线
                frameTable.AddBottomLine();
            }
            //其他消息
            if (historyInfo.OpenLockMode == -1)
            {
                //图片
                var device = Common.LocalDevice.Current.GetDevice(historyInfo.DeviceMac, historyInfo.DeviceEpoint);
                if (device == null)
                {
                    btnIcon.UnSelectedImagePath = "Device/IntelligentLocks.png";
                }
                else
                {
                    Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device);
                }
                //消息
                btnMsg.Text = historyInfo.AlarmMsg;
            }
            //门锁常开模式
            else if (historyInfo.OpenLockMode == 9000)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
                //消息
                if (historyInfo.OtherOpenLockMode == 9001)
                {
                    //常开模式手动开启
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualOpen;
                }
                else if (historyInfo.OtherOpenLockMode == 9002)
                {
                    //常开模式手动取消
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualClose;
                }
                else if (historyInfo.OtherOpenLockMode == 9003)
                {
                    //常开模式启用{0}小时
                    btnMsg.Text = Language.StringByID(R.MyInternationalizationString.uNormallyOpenModeOpenSomeTime).Replace("{0}", historyInfo.NormallyOpenContinuedTime);
                }
                else if (historyInfo.OtherOpenLockMode == 9004)
                {
                    //常开自动化手动取消
                    btnMsg.Text = Language.StringByID(R.MyInternationalizationString.uNormallyOpenLogicManualClose);
                }
                else
                {
                    //上面是App手动推送,这里是网关或者门锁自己推送
                    btnMsg.Text = historyInfo.AlarmMsg;
                }
            }
            //开锁成功
            else if (historyInfo.UnlockIsSuccess == true)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByPasswordSuccess;
                }
                else if (historyInfo.OpenLockMode == 3)
                {
                    //IC卡开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByICcardSuccess;
                }
                else if (historyInfo.OpenLockMode == 13)
                {
                    //静脉纹开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uStriaVenosusUnLockSuccess;
                }
                else if (historyInfo.OpenLockMode == 14)
                {
                    //人脸识别开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uFaceRecognitionUnLockSuccess;
                }
                else if (historyInfo.OpenLockMode == 15)
                {
                    //指纹开锁成功
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintSuccess;
                }
            }
            //开锁失败
            else
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByPasswordFail;
                }
                else if (historyInfo.OpenLockMode == 3)
                {
                    //IC卡开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByICcardFail;
                }
                else if (historyInfo.OpenLockMode == 13)
                {
                    //静脉纹开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uStriaVenosusUnLockFail;
                }
                else if (historyInfo.OpenLockMode == 14)
                {
                    //人脸识别开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uFaceRecognitionUnLockFail;
                }
                else if (historyInfo.OpenLockMode == 15)
                {
                    //指纹开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintFail;
                }
            }
        }
@@ -458,143 +501,6 @@
        #endregion
        #region ■ 获取记录___________________________
        /// <summary>
        /// 获取历史记录
        /// </summary>
        /// <returns></returns>
        private async Task<List<HistoryInfo>> GetHistoryLogInfo(Dictionary<string, string> dicMemberName)
        {
            if (this.listHistoryInfo != null)
            {
                //不二次获取,主要针对的是筛选功能
                return this.ScreeningHistoryData(dicMemberName);
            }
            //获取访问云端接口的启动参数
            var pra = this.GetReadHistoryPra();
            //获取门锁的打开和关闭记录
            var listAllLog = await this.GetDoorOpenHistoryLog(pra);
            //获取门锁的其他记录
            var listOtherLog = await this.GetDoorOtherHistoryLog(pra.UnlockTimeBegin, pra.UnlockTimeEnd);
            listAllLog.AddRange(listOtherLog);
            //排序一下
            var dicAllData = new Dictionary<string, List<HistoryInfo>>();
            var listSortTime = new List<string>();
            foreach (var data in listAllLog)
            {
                //按时间分组
                if (dicAllData.ContainsKey(data.UnlockTime) == false)
                {
                    dicAllData[data.UnlockTime] = new List<HistoryInfo>();
                    listSortTime.Add(data.UnlockTime);
                }
                dicAllData[data.UnlockTime].Add(data);
            }
            //执行排序,时间大的在前面
            listSortTime.Sort();
            this.listHistoryInfo = new List<HistoryInfo>();
            for (int i = listSortTime.Count - 1; i >= 0; i--)
            {
                this.listHistoryInfo.AddRange(dicAllData[listSortTime[i]]);
            }
            //筛选历史记录
            return this.ScreeningHistoryData(dicMemberName);
        }
        /// <summary>
        /// 获取门锁的打开和关闭记录
        /// </summary>
        /// <param name="i_pra"></param>
        /// <returns></returns>
        private async Task<List<HistoryInfo>> GetDoorOpenHistoryLog(GetHistoryDataPra i_pra)
        {
            var listLog = new List<HistoryInfo>();
            int nowPage = 0;
            while (true)
            {
                //访问云端
                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);
                if (dataInfo.HasNextPage == false)
                {
                    break;
                }
                //获取下一页
                nowPage++;
                i_pra.PageSetting.Page = nowPage;
            }
            return listLog;
        }
        /// <summary>
        /// 获取门锁的其他记录
        /// </summary>
        /// <returns></returns>
        private async Task<List<HistoryInfo>> GetDoorOtherHistoryLog(string beginTime, string endTime)
        {
            var listLog = new List<HistoryInfo>();
            //去获取其他信息
            var pra2 = new MessageInfoPra();
            pra2.BeginTime = beginTime;
            pra2.EndTime = endTime;
            pra2.Topic = "/Alarms/SendAlarmInform";
            pra2.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
            var result = await UserCenterLogic.GetResponseDataByRequestHttps("MessageCenter/GetMessageCenterPagger", true, pra2);
            if (result == null)
            {
                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 jobject = Newtonsoft.Json.Linq.JObject.Parse(myInfo.PayloadJson);
                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);
                //时间
                data.UnlockTime = myInfo.CreatedOnUtc;
                //主键
                data.MsgKeyId = myInfo.Id;
                //消息区分
                if (msgInfo.MsgDiv == 9000)
                {
                    data.OpenLockMode = 9000;
                }
                listLog.Add(data);
            }
            return listLog;
        }
        #endregion
        #region ■ 筛选记录___________________________
        /// <summary>
@@ -606,7 +512,6 @@
            //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了
            var listScreeningData = new List<HistoryInfo>();
            //清除掉之前的记录
            this.listOtherUserId = new List<string>();
            this.listOtherMsgId = new List<string>();
            //是否选择全选用户
@@ -687,14 +592,292 @@
                    this.listOtherMsgId.Add(info.MsgKeyId);
                }
            }
            if (info.CloudAccountId != string.Empty && dicMemberName.ContainsKey(info.CloudAccountId) == false
                && this.listOtherUserId.Contains(info.CloudAccountId) == false)
            {
                //无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
                this.listOtherUserId.Add(info.CloudAccountId);
            }
            return true;
        }
        #endregion
        #region ■ 获取门锁打开记录___________________
        /// <summary>
        /// 获取历史记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> GetHistoryLogInfo(Dictionary<string, string> dicMemberName)
        {
            if (this.listHistoryInfo != null)
            {
                //不二次获取,主要针对的是筛选功能
                return this.ScreeningHistoryData(dicMemberName);
            }
            //获取访问云端接口的启动参数
            var pra = this.GetReadHistoryPra();
            //获取门锁的打开和关闭记录
            var listAllLog = this.GetDoorOpenHistoryLog(pra);
            //获取门锁的其他记录
            var listOtherLog = this.GetDoorOtherHistoryLog(pra.UnlockTimeBegin, pra.UnlockTimeEnd);
            listAllLog.AddRange(listOtherLog);
            //排序一下
            var dicAllData = new Dictionary<string, List<HistoryInfo>>();
            var listSortTime = new List<string>();
            foreach (var data in listAllLog)
            {
                //按时间分组
                if (dicAllData.ContainsKey(data.UnlockTime) == false)
                {
                    dicAllData[data.UnlockTime] = new List<HistoryInfo>();
                    listSortTime.Add(data.UnlockTime);
                }
                dicAllData[data.UnlockTime].Add(data);
            }
            //执行排序,时间大的在前面
            listSortTime.Sort();
            this.listHistoryInfo = new List<HistoryInfo>();
            for (int i = listSortTime.Count - 1; i >= 0; i--)
            {
                this.listHistoryInfo.AddRange(dicAllData[listSortTime[i]]);
            }
            //筛选历史记录
            return this.ScreeningHistoryData(dicMemberName);
        }
        /// <summary>
        /// 获取门锁的打开和关闭记录
        /// </summary>
        /// <param name="i_pra"></param>
        /// <returns></returns>
        private List<HistoryInfo> GetDoorOpenHistoryLog(GetHistoryDataPra i_pra)
        {
            var listLog = new List<HistoryInfo>();
            int nowPage = 0;
            while (true)
            {
                //访问云端
                var result = UserCenterLogic.GetResponseDataByRequestHttps("DoorLock/GetDoorLockHistoryPager", true, i_pra);
                if (string.IsNullOrEmpty(result) == true)
                {
                    return null;
                }
                var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetHistoryDataResult>(result);
                foreach (var data in dataInfo.PageData)
                {
                    //不知道为什么会有上报了虚拟9000的那个特殊的东西
                    if (data.OpenLockMode == 9000 && data.OtherOpenLockMode <= 9000)
                    {
                        continue;
                    }
                    if (data.CloudAccountId == null)
                    {
                        data.CloudAccountId = string.Empty;
                    }
                    listLog.Add(data);
                }
                if (dataInfo.HasNextPage == false)
                {
                    break;
                }
                //获取下一页
                nowPage++;
                i_pra.PageSetting.Page = nowPage;
            }
            return listLog;
        }
        #endregion
        #region ■ 获取门锁其他记录___________________
        /// <summary>
        /// 获取门锁的其他记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> GetDoorOtherHistoryLog(string beginTime, string endTime)
        {
            var listLog = new List<HistoryInfo>();
            //获取门锁其他类信息上报
            var pra2 = new MessageInfoPra();
            pra2.BeginTime = beginTime;
            pra2.EndTime = endTime;
            pra2.Topic = "/Alarms/SendAlarmInform";
            pra2.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
            var result = UserCenterLogic.GetResponseDataByRequestHttps("MessageCenter/GetMessageCenterPagger", true, pra2);
            if (string.IsNullOrEmpty(result) == true)
            {
                return null;
            }
            this.AdjustDoorOtherAlarmData(ref listLog, result);
            //从自动化中,获取常开模式记录
            pra2.Topic = "/Logic/Execute_Respon";
            result = UserCenterLogic.GetResponseDataByRequestHttps("MessageCenter/GetMessageCenterPagger", true, pra2);
            if (string.IsNullOrEmpty(result) == true)
            {
                return null;
            }
            this.AdjustDoorNormallyOpenData(ref listLog, result);
            //获取门锁临时密码开锁记录
            pra2.Topic = "/DoorLock/DoorLockOperatingEventNotificationCommand";
            result = UserCenterLogic.GetResponseDataByRequestHttps("MessageCenter/GetMessageCenterPagger", true, pra2);
            if (string.IsNullOrEmpty(result) == true)
            {
                return null;
            }
            this.AdjustDoorTemporaryPasswordData(ref listLog, result);
            return listLog;
        }
        /// <summary>
        /// 处理门锁常开模式记录信息
        /// </summary>
        /// <param name="listLog"></param>
        /// <param name="result"></param>
        private void AdjustDoorOtherAlarmData(ref List<HistoryInfo> listLog, string result)
        {
            var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject<MessageCentetInfo>(result);
            string doorKey = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
            foreach (var myInfo in dataInfo2.PageData)
            {
                //设备对象
                var jobject = Newtonsoft.Json.Linq.JObject.Parse(myInfo.PayloadJson);
                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);
                //时间
                data.UnlockTime = myInfo.CreatedOnUtc;
                //主键
                data.MsgKeyId = myInfo.Id;
                //消息区分
                if (msgInfo.MsgDiv == 9000)
                {
                    data.OpenLockMode = 9000;
                }
                listLog.Add(data);
            }
        }
        /// <summary>
        /// 处理门锁常开模式信息上报
        /// </summary>
        /// <param name="listLog"></param>
        /// <param name="result"></param>
        private void AdjustDoorNormallyOpenData(ref List<HistoryInfo> listLog, string result)
        {
            var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject<MessageCentetInfo>(result);
            string doorKey = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
            foreach (var myInfo in dataInfo2.PageData)
            {
                var jobject = Newtonsoft.Json.Linq.JObject.Parse(myInfo.PayloadJson);
                var myActionData = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(jobject["Data"].ToString());
                if (myActionData.ActionData == null || myActionData.ActionData.Actiontype != 8)
                {
                    //不是常开模式的自动化
                    continue;
                }
                string deviceAddr = myActionData.ActionData.MacStr;
                int deviceEpoint = myActionData.ActionData.Epoint;
                if (doorKey != deviceAddr + "_" + deviceEpoint)
                {
                    //不是同一个门锁的记录
                    continue;
                }
                var data = new HistoryInfo();
                data.DeviceMac = deviceAddr;
                data.DeviceEpoint = deviceEpoint;
                //消息
                if (myActionData.ActionData.PassDataString == "055704010112")
                {
                    //常开模式开启(自动化触发)
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg11);
                }
                else if (myActionData.ActionData.PassDataString == "055704010113")
                {
                    //常开模式结束(自动化触发)
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg12);
                }
                else
                {
                    continue;
                }
                //时间
                data.UnlockTime = myInfo.CreatedOnUtc;
                //主键
                data.MsgKeyId = myInfo.Id;
                //消息区分
                data.OpenLockMode = 9000;
                listLog.Add(data);
            }
        }
        /// <summary>
        /// 处理门锁临时密码上报
        /// </summary>
        /// <param name="listLog"></param>
        /// <param name="result"></param>
        private void AdjustDoorTemporaryPasswordData(ref List<HistoryInfo> listLog, string result)
        {
            var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject<MessageCentetInfo>(result);
            string doorKey = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
            foreach (var myInfo in dataInfo2.PageData)
            {
                var jobject = Newtonsoft.Json.Linq.JObject.Parse(myInfo.PayloadJson);
                string deviceAddr = jobject.Value<string>("DeviceAddr");
                int deviceEpoint = jobject.Value<int>("Epoint");
                if (doorKey != deviceAddr + "_" + deviceEpoint)
                {
                    //不是同一个门锁的记录
                    continue;
                }
                var myActionData = Newtonsoft.Json.JsonConvert.DeserializeObject<PasswordOperationData>(jobject["Data"].ToString());
                if (myActionData.UserID != 246)
                {
                    //不是临时密码
                    continue;
                }
                var data = new HistoryInfo();
                data.DeviceMac = deviceAddr;
                data.DeviceEpoint = deviceEpoint;
                //消息
                if (myActionData.OperationEventCode == 2)
                {
                    //临时密码开锁成功
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg13);
                }
                else
                {
                    //临时密码开锁失败
                    data.AlarmMsg = Language.StringByID(R.MyInternationalizationString.uDoorLockAlarmMsg14);
                }
                //时间
                data.UnlockTime = myInfo.CreatedOnUtc;
                //主键
                data.MsgKeyId = myInfo.Id;
                listLog.Add(data);
            }
        }
        #endregion
@@ -704,14 +887,14 @@
        /// <summary>
        /// 清空所有记录
        /// </summary>
        private async void ClearAllHistoryLog()
        private void ClearAllHistoryLog()
        {
            //获取访问云端接口的启动参数
            //获取访问云端接口的启动参数(2020.05.08:全部清空)
            var pra = this.GetDeleteDataPra();
            //打开进度条
            this.ShowProgressBar();
            var result = await UserCenterLogic.GetResultStatuByRequestHttps("DoorLock/ClearDoorLockHistory", true, pra);
            var result = UserCenterLogic.GetResultStatuByRequestHttps("DoorLock/ClearDoorLockHistory", true, pra);
            if (result == false)
            {
                return;
@@ -725,7 +908,7 @@
                for (int i = 0; i < listOtherMsgId.Count; i++)
                {
                    pra2.Id = listOtherMsgId[i];
                    result = await UserCenterLogic.GetResultStatuByRequestHttps("MessageCenter/DelMessageCenterItem", true, pra2);
                    result = UserCenterLogic.GetResultStatuByRequestHttps("MessageCenter/DelMessageCenterItem", true, pra2);
                    if (result == false)
                    {
                        return;
@@ -741,7 +924,6 @@
            //清空
            this.listOtherMsgId = new List<string>();
            this.listOtherUserId = new List<string>();
            this.listHistoryInfo = null;
            HdlThreadLogic.Current.RunMain(() =>
@@ -783,34 +965,11 @@
            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 = null;
            //指定用户
            if (listSearchUserId.Contains("-1") == false)
            {
                listUser = new List<string>();
                listUser.AddRange(listSearchUserId);
                //如果指定有其他
                if (listSearchUserId.Contains("-9999") == true)
                {
                    listUser.AddRange(this.listOtherUserId);
                }
            }
            //全选则为null
            List<int> listLock = null;
            if (listSearchLockId.Contains(-1) == false)
            {
                listLock = new List<int>();
                listLock.AddRange(listSearchLockId);
            }
            var pra = new DeleteHistoryDataPra();
            pra.UnlockTimeBegin = dateFrom.ToUniversalTime().ToString();
            pra.UnlockTimeEnd = dateTo.ToUniversalTime().ToString();
            pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
            pra.DoorLockId = this.DeviceDoor.DeviceAddr + "_" + this.DeviceDoor.DeviceEpoint;
            pra.CloudAccountIds = listUser;
            pra.OpenLockModes = listLock;
            return pra;
        }
@@ -926,7 +1085,7 @@
        private class HistoryInfo
        {
            /// <summary>
            /// 开锁方式 0:密码  15:指纹  3:IC卡  9000:常开模式(自定义的)
            /// 开锁方式 0:密码 13:静脉纹 14:人脸识别 15:指纹  3:IC卡  9000:常开模式(自定义的)
            /// </summary>
            public int OpenLockMode = -1;
            /// <summary>
@@ -941,6 +1100,14 @@
            /// 账号的ID
            /// </summary>
            public string CloudAccountId = string.Empty;
            /// <summary>
            /// 其他开锁方式(OpenLockMode=9000时有效) 9001:常开打开 9002:常开取消 9003:常开持续 9004:常开自动化手动取消
            /// </summary>
            public int? OtherOpenLockMode = -1;
            /// <summary>
            /// 常开持续时间(1~72小时 OtherOpenLockMode=9003的时候有效)
            /// </summary>
            public string NormallyOpenContinuedTime = string.Empty;
            /// <summary>
            /// 当开锁方式为-1时使用,它属于其他类
            /// </summary>
@@ -959,6 +1126,25 @@
            public string MsgKeyId = string.Empty;
        }
        /// <summary>
        /// 临时密码数据
        /// </summary>
        private class PasswordOperationData
        {
            /// <summary>
            /// 0:密码 15:指纹 3:IC卡
            /// </summary>
            public int OperationEventSoure = -1;
            /// <summary>
            /// 2:开锁成功
            /// </summary>
            public int OperationEventCode = -1;
            /// <summary>
            /// 246代表临时密码
            /// </summary>
            public int UserID = -1;
        }
        #endregion
    }
}