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
}
}