using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceDoorLock { /// /// 门锁的历史记录界面 /// public class DoorLockHistoryLogForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 列表控件 /// private VerticalFrameRefreshControl listView = null; /// /// 日期From控件 /// private DateSelectControl dateFromControl = null; /// /// 日期To控件 /// private DateSelectControl dateToControl = null; /// /// 成员信息 /// private List listMenberInfo = null; /// /// 设备对象 /// private CommonDevice DeviceDoor = null; /// /// 检索对象的ID(-1:所有 -9999:其他) /// private List listSearchUserId = new List() { "-1" }; /// /// 检索开锁方式的ID(-1:所有 0:密码 15:指纹 3:IC卡 9000:常开模式(自定义的)) /// private List listSearchLockId = new List() { -1 }; /// /// 获取到的历史记录 /// private List listHistoryInfo = null; /// /// 其他消息的主键,它存在另外的一张数据库表中 /// private List listOtherMsgId = new List(); #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 门锁的Mac地址 public void ShowForm(string i_DeviceMac) { this.DeviceDoor = Common.LocalDevice.Current.GetDevicesByMac(i_DeviceMac, false)[0]; //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uHistoryLog)); //成员不允许清空记录 if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2) { //删除 var btnDelete = new MostRightIconControl(69, 69); btnDelete.UnSelectedImagePath = "Item/DeleteIcon2Selected.png"; topFrameLayout.AddChidren(btnDelete); btnDelete.InitControl(); btnDelete.ButtonClickEvent += (sender, e) => { var form = new TopRightMenuControl(1, 2); //清空记录 form.AddRowMenu(Language.StringByID(R.MyInternationalizationString.uClearLog), "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () => { if (this.listView.frameTable.ChildrenCount == 0) { //无数据可删 return; } //确认清空当前记录? this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uConfirmClearNowLog), () => { HdlThreadLogic.Current.RunThread(() => { //清空所有记录 this.ClearAllHistoryLog(); }); }); }); }; } //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); //初始化头部检索控件 this.InitTitleSearchControl(); //初始化记录列表 this.InitLogListInfo(true); } /// /// 初始化头部检索控件 /// private void InitTitleSearchControl() { var frameTitle = new FrameRowControl(); frameTitle.UseClickStatu = false; frameTitle.Height = Application.GetRealHeight(115); frameTitle.BackgroundColor = topFrameLayout.BackgroundColor; bodyFrameLayout.AddChidren(frameTitle); var btnDateIcon = frameTitle.AddLeftIcon(69); btnDateIcon.UnSelectedImagePath = "Item/DateSearchIcon.png"; dateFromControl = new DateSelectControl(Language.StringByID(R.MyInternationalizationString.uStartDate)); dateFromControl.Y = Application.GetRealHeight(35); dateFromControl.X = Application.GetRealWidth(138); dateFromControl.dateValue = DateTime.Now.ToString("yyyyMMdd"); frameTitle.AddChidren(dateFromControl, ChidrenBindMode.NotBind); dateFromControl.DateSelectEvent += (dateValue) => { //初始化记录列表 this.InitLogListInfo(true); }; var btnTemp = new NormalViewControl(26, 58, true); btnTemp.Y = Application.GetRealHeight(29); btnTemp.X = dateFromControl.Right + Application.GetRealWidth(12); btnTemp.TextColor = UserCenterColor.Current.TextGrayColor1; btnTemp.Text = "-"; frameTitle.AddChidren(btnTemp, ChidrenBindMode.NotBind); dateToControl = new DateSelectControl(Language.StringByID(R.MyInternationalizationString.uEndDate)); dateToControl.Y = Application.GetRealHeight(35); dateToControl.X = btnTemp.Right + Application.GetRealWidth(12); dateToControl.dateValue = DateTime.Now.ToString("yyyyMMdd"); frameTitle.AddChidren(dateToControl, ChidrenBindMode.NotBind); dateToControl.DateSelectEvent += (dateValue) => { //初始化记录列表 this.InitLogListInfo(true); }; //类型筛选 var btnScreening = frameTitle.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uScreeningType), 145); btnScreening.TextSize = 12; btnScreening.Width = btnScreening.GetRealWidthByText(); btnScreening.X = frameTitle.Width - Application.GetRealWidth(58) - btnScreening.Width; btnScreening.ButtonClickEvent += (sender, e) => { //显示类型筛选界面 this.ShowDoorLockScreeningTypeForm(); }; frameTitle.ChangedChidrenBindMode(btnScreening, ChidrenBindMode.NotBind); //类型筛选的图标 var btnScreeningIcon = new IconViewControl(69); btnScreeningIcon.X = btnScreening.X - Application.GetRealWidth(12) - btnScreeningIcon.IconSize; btnScreeningIcon.Gravity = Gravity.CenterVertical; btnScreeningIcon.UnSelectedImagePath = "Item/ScreeningType.png"; frameTitle.AddChidren(btnScreeningIcon, ChidrenBindMode.NotBind); btnScreeningIcon.ButtonClickEvent += (sender, e) => { //显示类型筛选界面 this.ShowDoorLockScreeningTypeForm(); }; //底线 frameTitle.AddBottomLine(); this.listView = new VerticalFrameRefreshControl(29); listView.Y = frameTitle.Bottom - Application.GetRealHeight(3); listView.Height = bodyFrameLayout.Height - frameTitle.Bottom + Application.GetRealHeight(3); bodyFrameLayout.AddChidren(listView); listView.frameTable.BackgroundColor = UserCenterColor.Current.White; listView.BeginHeaderRefreshingAction += () => { //下拉刷新 this.InitLogListInfo(true); }; } #endregion #region ■ 初始化记录列表_____________________ /// /// 初始化记录列表 /// /// 是否从新从云端读取数据 private void InitLogListInfo(bool reReadData) { this.listView.frameTable.RemoveAll(); listView.frameTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(115 - 3); //如果From>To的时候,不鸟它 if (Convert.ToInt32(dateFromControl.dateValue) > Convert.ToInt32(dateToControl.dateValue)) { //开始时间大于结束时间 this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uFromTimeIsOverToTime)); return; } if (reReadData == true) { //置空后,重新获取 this.listHistoryInfo = null; } HdlThreadLogic.Current.RunThread(() => { //打开进度条 this.ShowProgressBar(); //成员列表 var result = this.GetMemberListInfo(); if (result == false) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //成员信息 var dicMemberName = new Dictionary(); 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 historyLog = this.GetHistoryLogInfo(dicMemberName); if (historyLog == null) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); HdlThreadLogic.Current.RunMain(() => { for (int i = 0; i < historyLog.Count; i++) { //添加记录行 this.AddLogInfoRow(historyLog[i], dicMemberName, i != historyLog.Count - 1); } //隐藏下拉刷新特效 listView.EndHeaderRefreshing(); if (listView.frameTable.ChildrenCount == 0) { return; } //调整列表控件的高度 listView.AdjustTableHeight(Application.GetRealHeight(23)); }); }); } /// /// 获取成员列表信息 /// /// private bool GetMemberListInfo() { if (listMenberInfo != null) { //只初始化一次 return true; } listMenberInfo = new List(); //把自己也加进去 var myInfo = new MemberInfoRes() { Account = UserCenterResourse.UserInfo.Account, UserName = UserCenterResourse.UserInfo.UserName, SubAccountDistributedMark = Common.Config.Instance.Guid }; listMenberInfo.Add(myInfo); if (UserCenterResourse.UserInfo.AuthorityNo == 3) { //成员只能看自己的 return true; } var pra = new MemberListInfoPra(); string result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra); if (string.IsNullOrEmpty(result) == true) { return false; } List listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); var checkList = new List(); foreach (MemberInfoRes infoRes in listInfo) { if (checkList.Contains(infoRes.DistributedMark) == true) { continue; } checkList.Add(infoRes.DistributedMark); listMenberInfo.Add(infoRes); } return true; } #endregion #region ■ 添加记录行_________________________ /// /// 添加记录行 /// /// 历史记录 /// 名字 /// 添加底线 private void AddLogInfoRow(HistoryInfo historyInfo, Dictionary dicName, bool addLine = true) { var frameTable = new FrameRowControl(listView.rowSpace / 2); frameTable.UseClickStatu = false; this.listView.AddChidren2(frameTable); //图标 var btnIcon = frameTable.AddLeftIcon(); //信息 var btnMsg = frameTable.AddTopView("", 600); //人物 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) { //如果日期范围一样,则不显示年月日 frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("HH:mm:ss"), 400); } else { //如果日期范围不一样,则显示年月日 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 == 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 == 15) { //指纹开锁失败 btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintFail; } } } #endregion #region ■ 类型筛选___________________________ /// /// 显示类型筛选界面 /// private void ShowDoorLockScreeningTypeForm() { var dic = new Dictionary(); for (int i = 0; i < listMenberInfo.Count; i++) { dic.Add(listMenberInfo[i].SubAccountDistributedMark, string.IsNullOrEmpty(listMenberInfo[i].UserName) == false ? listMenberInfo[i].UserName : listMenberInfo[i].Account); } //显示底部类型筛选 var form = new DoorLockScreeningTypeForm(); form.AddForm(dic, listSearchUserId, listSearchLockId); form.FinishSelectEvent += (selectUser, selectLock) => { listSearchUserId.Clear(); listSearchUserId.AddRange(selectUser); listSearchLockId.Clear(); listSearchLockId.AddRange(selectLock); //初始化记录列表 this.InitLogListInfo(false); }; } #endregion #region ■ 筛选记录___________________________ /// /// 筛选历史记录 /// /// private List ScreeningHistoryData(Dictionary dicMemberName) { //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了 var listScreeningData = new List(); //清除掉之前的记录 this.listOtherMsgId = new List(); //是否选择全选用户 bool selectAllUser = this.listSearchUserId.Contains("-1"); //是否单选了其他 bool selectOtherUser = this.listSearchUserId.Contains("-9999"); //是否选择全选开锁方式 bool selectAllLockMode = this.listSearchLockId.Contains(-1); //一个个去遍历 foreach (var data in this.listHistoryInfo) { //检测该历史记录能否显示 bool result = this.CheckHistoryDataCanShow(data, dicMemberName, selectAllUser, selectOtherUser, selectAllLockMode); if (result == true) { listScreeningData.Add(data); } } return listScreeningData; } /// /// 检测该历史记录能否显示 /// /// 检测对象 /// 成员信息 /// 是否选择全选用户 /// 是否单选了其他 /// 是否选择全选开锁方式 private bool CheckHistoryDataCanShow(HistoryInfo info, Dictionary dicMemberName, bool selectAllUser, bool selectOtherUser, bool slectAllLockMode) { //如果没有选择 全选用户 if (selectAllUser == false) { //如果这个用户ID不包含在指定选择的成员列表里面 if (this.listSearchUserId.Contains(info.CloudAccountId) == false) { if (dicMemberName.ContainsKey(info.CloudAccountId) == true) { //如果能够识别这个id的话,则表示它不属于其他类,并且也不再选择目标内 return false; } //如果没有选择 其他的话,不显示 if (selectOtherUser == false) { return false; } } } //如果是成员身份,并且用户ID不为空 if (UserCenterResourse.UserInfo.AuthorityNo == 3 && info.CloudAccountId != string.Empty) { //成员不能看到 其他人的记录(成员的时候,这个变量里面只有他自己一个) if (dicMemberName.ContainsKey(info.CloudAccountId) == false) { return false; } } //如果没有选择 全选开锁方式 if (slectAllLockMode == false) { //如果这个开锁方式不在选择的列表里面的话 if (this.listSearchLockId.Contains(info.OpenLockMode) == false) { return false; } } //另一张表的数据主键 if (info.OpenLockMode == -1 || info.OpenLockMode == 9000) { if (info.MsgKeyId != string.Empty) { //其他消息的主键,它存在另外的一张数据库表中 this.listOtherMsgId.Add(info.MsgKeyId); } } return true; } #endregion #region ■ 获取门锁打开记录___________________ /// /// 获取历史记录 /// /// private List GetHistoryLogInfo(Dictionary 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>(); var listSortTime = new List(); foreach (var data in listAllLog) { //按时间分组 if (dicAllData.ContainsKey(data.UnlockTime) == false) { dicAllData[data.UnlockTime] = new List(); listSortTime.Add(data.UnlockTime); } dicAllData[data.UnlockTime].Add(data); } //执行排序,时间大的在前面 listSortTime.Sort(); this.listHistoryInfo = new List(); for (int i = listSortTime.Count - 1; i >= 0; i--) { this.listHistoryInfo.AddRange(dicAllData[listSortTime[i]]); } //筛选历史记录 return this.ScreeningHistoryData(dicMemberName); } /// /// 获取门锁的打开和关闭记录 /// /// /// private List GetDoorOpenHistoryLog(GetHistoryDataPra i_pra) { var listLog = new List(); 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(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 ■ 获取门锁其他记录___________________ /// /// 获取门锁的其他记录 /// /// private List GetDoorOtherHistoryLog(string beginTime, string endTime) { var listLog = new List(); //获取门锁其他类信息上报 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; } /// /// 处理门锁常开模式记录信息 /// /// /// private void AdjustDoorOtherAlarmData(ref List listLog, string result) { var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject(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("DeviceAddr"); int deviceEpoint = jobject.Value("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); } } /// /// 处理门锁常开模式信息上报 /// /// /// private void AdjustDoorNormallyOpenData(ref List listLog, string result) { var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject(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(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); } } /// /// 处理门锁临时密码上报 /// /// /// private void AdjustDoorTemporaryPasswordData(ref List listLog, string result) { var dataInfo2 = Newtonsoft.Json.JsonConvert.DeserializeObject(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("DeviceAddr"); int deviceEpoint = jobject.Value("Epoint"); if (doorKey != deviceAddr + "_" + deviceEpoint) { //不是同一个门锁的记录 continue; } var myActionData = Newtonsoft.Json.JsonConvert.DeserializeObject(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 #region ■ 清空记录___________________________ /// /// 清空所有记录 /// private void ClearAllHistoryLog() { //获取访问云端接口的启动参数(2020.05.08:全部清空) var pra = this.GetDeleteDataPra(); //打开进度条 this.ShowProgressBar(); var result = UserCenterLogic.GetResultStatuByRequestHttps("DoorLock/ClearDoorLockHistory", true, pra); if (result == false) { return; } //删除其他消息 if (listOtherMsgId.Count > 0) { var pra2 = new MessageReadStatuPra(); pra2.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); for (int i = 0; i < listOtherMsgId.Count; i++) { pra2.Id = listOtherMsgId[i]; result = UserCenterLogic.GetResultStatuByRequestHttps("MessageCenter/DelMessageCenterItem", true, pra2); if (result == false) { return; } } } //关闭进度条 this.CloseProgressBar(); if (result == false) { return; } //清空 this.listOtherMsgId = new List(); this.listHistoryInfo = null; HdlThreadLogic.Current.RunMain(() => { this.listView.frameTable.RemoveAll(); listView.frameTable.Height = bodyFrameLayout.Height - Application.GetRealHeight(115 - 3); }); } #endregion #region ■ 一般方法___________________________ /// /// 获取访问云端接口的启动参数 /// /// private GetHistoryDataPra GetReadHistoryPra() { 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); //全部读取 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; return pra; } /// /// 获取删除数据的云端接口的启动参数 /// /// private DeleteHistoryDataPra GetDeleteDataPra() { 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); 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; return pra; } #endregion #region ■ 结构体_____________________________ /// /// 获取历史记录数据 /// private class GetHistoryDataPra : IfacePraCommon { /// /// RequestVersion /// public string RequestVersion = Common.CommonPage.RequestVersion; /// /// Token /// public string LoginAccessToken = string.Empty; /// /// 住宅ID /// public string HomeId = Common.Config.Instance.Home.Id; /// /// 门锁的Mac地址 /// public string DoorLockId = string.Empty; /// /// Config.Instance.Guid 或者 MemberInfoRes.SubAccountDistributedMark /// public List CloudAccountIdArr = new List(); /// /// 开锁方式(0:密码、15:指纹、3:IC卡) /// public List OpenLockModeArr = null; /// /// 开锁是否成功 /// public bool? UnlockIsSuccess = null; /// /// 搜索开锁开始时间 /// public string UnlockTimeBegin; /// /// 搜索开锁结束时间 /// public string UnlockTimeEnd; /// /// 页数 /// public PageSettingInfo PageSetting = new PageSettingInfo() { PageSize = 100 }; } /// /// 获取历史记录的结果 /// private class GetHistoryDataResult { /// /// 数据 /// public List PageData = null; /// /// 是否存在下一页的数据 /// public bool HasNextPage = false; } /// /// 删除历史记录数据 /// private class DeleteHistoryDataPra : IfacePraCommon { /// /// RequestVersion /// public string RequestVersion = Common.CommonPage.RequestVersion; /// /// Token /// public string LoginAccessToken = string.Empty; /// /// 住宅ID /// public string HomeId = Common.Config.Instance.Home.Id; /// /// 门锁的Mac地址 /// public string DoorLockId = string.Empty; /// /// Config.Instance.Guid 或者 MemberInfoRes.SubAccountDistributedMark /// public List CloudAccountIds = null; /// /// 开锁方式(0:密码、15:指纹、3:IC卡) /// public List OpenLockModes = null; /// /// 搜索开锁开始时间 /// public string UnlockTimeBegin; /// /// 搜索开锁结束时间 /// public string UnlockTimeEnd; } /// /// 历史记录的结果 /// private class HistoryInfo { /// /// 开锁方式 0:密码 15:指纹 3:IC卡 9000:常开模式(自定义的) /// public int OpenLockMode = -1; /// /// 开锁时间 /// public string UnlockTime = string.Empty; /// /// 开锁是否成功 /// public bool UnlockIsSuccess = false; /// /// 账号的ID /// public string CloudAccountId = string.Empty; /// /// 其他开锁方式(OpenLockMode=9000时有效) 9001:常开打开 9002:常开取消 9003:常开持续 9004:常开自动化手动取消 /// public int? OtherOpenLockMode = -1; /// /// 常开持续时间(1~72小时 OtherOpenLockMode=9003的时候有效) /// public string NormallyOpenContinuedTime = string.Empty; /// /// 当开锁方式为-1时使用,它属于其他类 /// public string AlarmMsg = string.Empty; /// /// 当开锁方式为-1时使用,设备Mac /// public string DeviceMac = string.Empty; /// /// 当开锁方式为-1时使用,设备端点 /// public int DeviceEpoint = 0; /// /// 当开锁方式为-1时使用,消息的数据库主键 /// public string MsgKeyId = string.Empty; } /// /// 临时密码数据 /// private class PasswordOperationData { /// /// 0:密码 15:指纹 3:IC卡 /// public int OperationEventSoure = -1; /// /// 2:开锁成功 /// public int OperationEventCode = -1; /// /// 246代表临时密码 /// public int UserID = -1; } #endregion } }