using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace Shared.Phone.UserCenter.DeviceDoorLock
|
{
|
/// <summary>
|
/// 门锁的历史记录界面
|
/// </summary>
|
public class DoorLockHistoryLogForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 列表控件
|
/// </summary>
|
private VerticalListControl listView = null;
|
/// <summary>
|
/// 日期From控件
|
/// </summary>
|
private DateSelectControl dateFromControl = null;
|
/// <summary>
|
/// 日期To控件
|
/// </summary>
|
private DateSelectControl dateToControl = null;
|
/// <summary>
|
/// 成员信息
|
/// </summary>
|
private List<MemberInfoRes> listMenberInfo = null;
|
/// <summary>
|
/// 设备的Mac地址
|
/// </summary>
|
private string DeviceMac = string.Empty;
|
/// <summary>
|
/// 检索对象的ID(-1:所有 空字符串:其他)
|
/// </summary>
|
private List<string> listSearchUserId = new List<string>() { "-1" };
|
/// <summary>
|
/// 检索开锁方式的ID(-1:所有 0:密码 15:指纹 3:IC卡)
|
/// </summary>
|
private List<int> listSearchLockId = new List<int>() { -1 };
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
/// <param name="i_DeviceMac">门锁的Mac地址</param>
|
public void ShowForm(string i_DeviceMac)
|
{
|
this.DeviceMac = i_DeviceMac;
|
|
//设置头部信息
|
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) =>
|
{
|
var form = new TopRightMenuControl(1, 449);
|
//清空记录
|
form.AddRowMenu(Language.StringByID(R.MyInternationalizationString.uClearLog), "Item/DeleteIcon2.png", "Item/DeleteIcon2Selected.png", () =>
|
{
|
if (this.listView.ChildrenCount == 0)
|
{
|
//无数据可删
|
return;
|
}
|
//确认清空当前记录?
|
this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uConfirmClearNowLog), () =>
|
{
|
//清空所有记录
|
this.ClearAllHistoryLog();
|
});
|
});
|
};
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
private void InitMiddleFrame()
|
{
|
//清空bodyFrame
|
this.ClearBodyFrame();
|
|
//初始化头部检索控件
|
this.InitTitleSearchControl();
|
|
//主线程的异步会阻塞主线程,导致界面有段时间会白屏,所以这样子让界面先出来
|
//然后再刷新数据
|
HdlThreadLogic.Current.RunMainInThread(() =>
|
{
|
//初始化记录列表
|
this.InitLogListInfo();
|
});
|
}
|
|
/// <summary>
|
/// 初始化头部检索控件
|
/// </summary>
|
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();
|
};
|
|
var btnTemp = new NormalViewControl(26, 58, true);
|
btnTemp.Y = Application.GetRealHeight(29);
|
btnTemp.X = Application.GetRealWidth(357);
|
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 = Application.GetRealWidth(395);
|
dateToControl.dateValue = DateTime.Now.ToString("yyyyMMdd");
|
frameTitle.AddChidren(dateToControl, ChidrenBindMode.NotBind);
|
dateToControl.DateSelectEvent += (dateValue) =>
|
{
|
//初始化记录列表
|
this.InitLogListInfo();
|
};
|
|
//类型筛选
|
var btnScreening = frameTitle.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uScreeningType), 145);
|
frameTitle.ChangedChidrenBindMode(btnScreening, ChidrenBindMode.NotBind);
|
btnScreening.TextSize = 12;
|
|
btnScreening.ButtonClickEvent += (sender, e) =>
|
{
|
//显示类型筛选界面
|
this.ShowDoorLockScreeningTypeForm();
|
};
|
//类型筛选的图标
|
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 VerticalListControl(29);
|
listView.Y = frameTitle.Bottom - Application.GetRealHeight(3);
|
listView.BackgroundColor = UserCenterColor.Current.White;
|
listView.Height = bodyFrameLayout.Height - frameTitle.Bottom + Application.GetRealHeight(3);
|
bodyFrameLayout.AddChidren(listView);
|
}
|
|
#endregion
|
|
#region ■ 初始化记录列表_____________________
|
|
/// <summary>
|
/// 初始化记录列表
|
/// </summary>
|
private async void InitLogListInfo()
|
{
|
this.listView.RemoveAll();
|
listView.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;
|
}
|
//打开进度条
|
this.ShowProgressBar();
|
//成员列表
|
var result = await this.GetMemberListInfo();
|
if (result == false)
|
{
|
//关闭进度条
|
this.CloseProgressBar(ShowReLoadMode.YES);
|
return;
|
}
|
//历史记录
|
var historyLog = await this.GetHistoryLogInf();
|
if (historyLog == null)
|
{
|
//关闭进度条
|
this.CloseProgressBar(ShowReLoadMode.YES);
|
return;
|
}
|
//关闭进度条
|
this.CloseProgressBar();
|
|
var dic = new Dictionary<string, string>();
|
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);
|
}
|
for (int i = 0; i < historyLog.Count; i++)
|
{
|
//添加记录行
|
this.AddLogInfoRow(historyLog[i], dic, i != historyLog.Count - 1);
|
}
|
|
if (listView.ChildrenCount == 0)
|
{
|
return;
|
}
|
|
//调整列表控件的高度
|
var realHeight = listView.ChildrenCount * listView.GetChildren(0).Height;
|
realHeight += Application.GetRealHeight(23 + 3);
|
if (realHeight < listView.Height)
|
{
|
//缩小控件高度
|
listView.Height = realHeight;
|
}
|
}
|
|
/// <summary>
|
/// 获取成员列表信息
|
/// </summary>
|
/// <returns></returns>
|
private async Task<bool> GetMemberListInfo()
|
{
|
if (listMenberInfo != null)
|
{
|
//只初始化一次
|
return true;
|
}
|
listMenberInfo = new List<MemberInfoRes>();
|
//把自己也加进去
|
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 = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra);
|
if (result == null)
|
{
|
return false;
|
}
|
List<MemberInfoRes> listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<MemberInfoRes>>(result);
|
var checkList = new List<string>();
|
foreach (MemberInfoRes infoRes in listInfo)
|
{
|
if (checkList.Contains(infoRes.DistributedMark) == true)
|
{
|
continue;
|
}
|
checkList.Add(infoRes.DistributedMark);
|
listMenberInfo.Add(infoRes);
|
}
|
return true;
|
}
|
|
#endregion
|
|
#region ■ 添加记录行_________________________
|
|
/// <summary>
|
/// 添加记录行
|
/// </summary>
|
/// <param name="historyInfo">历史记录</param>
|
/// <param name="dicName">名字</param>
|
/// <param name="addLine">添加底线</param>
|
private void AddLogInfoRow(HistoryInfo historyInfo, Dictionary<string, string> dicName, bool addLine = true)
|
{
|
var frameTable = new FrameRowControl(listView.rowSpace / 2);
|
frameTable.UseClickStatu = false;
|
this.listView.AddChidren(frameTable);
|
//图标
|
var btnIcon = frameTable.AddLeftIcon();
|
if (historyInfo.UnlockIsSuccess == true)
|
{
|
btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
|
}
|
else
|
{
|
btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
|
}
|
|
//信息
|
var btnMsg = frameTable.AddLeftCaption("", 600, 60);
|
btnMsg.TextSize = 15;
|
//这个坐标有点特殊
|
btnMsg.Y = Application.GetRealHeight(12) + frameTable.chidrenYaxis;
|
frameTable.AddChidren(btnMsg, ChidrenBindMode.NotBind);
|
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);
|
var btnpersion = frameTable.AddLeftCaption(perName, 600, 50, true);
|
//这个坐标有点特殊
|
btnpersion.Y = Application.GetRealHeight(72) + frameTable.chidrenYaxis;
|
btnpersion.TextSize = 12;
|
btnpersion.TextColor = UserCenterColor.Current.TextGrayColor1;
|
frameTable.AddChidren(btnpersion, ChidrenBindMode.NotBind);
|
|
//时间
|
frameTable.AddMostRightView(historyInfo.UnlockTime, 400);
|
if (addLine == true)
|
{
|
//底线
|
frameTable.AddBottomLine();
|
}
|
}
|
|
#endregion
|
|
#region ■ 类型筛选___________________________
|
|
/// <summary>
|
/// 显示类型筛选界面
|
/// </summary>
|
private void ShowDoorLockScreeningTypeForm()
|
{
|
var dic = new Dictionary<string, string>();
|
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();
|
};
|
}
|
|
#endregion
|
|
#region ■ 获取记录___________________________
|
|
/// <summary>
|
/// 获取历史记录
|
/// </summary>
|
/// <returns></returns>
|
private async Task<List<HistoryInfo>> GetHistoryLogInf()
|
{
|
//获取访问云端接口的启动参数
|
var pra = this.GetDbInterfacePra();
|
|
int nowPage = 0;
|
var listLog = new List<HistoryInfo>();
|
while (true)
|
{
|
//访问云端
|
var result = await UserCenterLogic.GetResponseDataByRequestHttps("DoorLock/GetDoorLockHistoryPager", true, pra);
|
if (result == null)
|
{
|
return null;
|
}
|
var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetHistoryDataResult>(result);
|
if (dataInfo.HasNextPage == false)
|
{
|
break;
|
}
|
//获取下一页
|
nowPage++;
|
pra.PageSetting.Page = nowPage;
|
}
|
|
//排序一下
|
var dic = new Dictionary<string, List<HistoryInfo>>();
|
var listSort = new List<string>();
|
//是否包含其他
|
bool flage = this.listSearchUserId.Contains("") || this.listSearchUserId.Contains("-1");
|
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;
|
}
|
|
#endregion
|
|
#region ■ 清空记录___________________________
|
|
/// <summary>
|
/// 清空所有记录
|
/// </summary>
|
private async void ClearAllHistoryLog()
|
{
|
//获取访问云端接口的启动参数
|
var pra = this.GetDbInterfacePra();
|
//打开进度条
|
this.ShowProgressBar();
|
var result = await UserCenterLogic.GetResultStatuByRequestHttps("DoorLock/ClearDoorLockHistory", true, pra);
|
//关闭进度条
|
this.CloseProgressBar();
|
if (result == false)
|
{
|
return;
|
}
|
this.listView.RemoveAll();
|
listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(115 - 3);
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 获取访问云端接口的启动参数
|
/// </summary>
|
/// <returns></returns>
|
private GetHistoryDataPra GetDbInterfacePra()
|
{
|
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);
|
|
//全选则为null
|
List<string> listUser = null;
|
if (listSearchUserId.Contains("-1") == false)
|
{
|
listUser = new List<string>();
|
listUser.AddRange(listSearchUserId);
|
//移除其他,因为云端固定会给
|
listUser.Remove("");
|
}
|
|
//全选则为null
|
List<int> listLock = null;
|
if (listSearchLockId.Contains(-1) == false)
|
{
|
listLock = new List<int>();
|
listLock.AddRange(listSearchLockId);
|
}
|
|
var pra = new GetHistoryDataPra();
|
pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
|
pra.DoorLockId = this.DeviceMac;
|
pra.CloudAccountIdArr = listUser;
|
pra.OpenLockModeArr = listLock;
|
pra.UnlockTimeBegin = dateFrom;
|
pra.UnlockTimeEnd = dateTo;
|
return pra;
|
}
|
|
#endregion
|
|
#region ■ 结构体_____________________________
|
|
/// <summary>
|
/// 获取历史记录数据
|
/// </summary>
|
private class GetHistoryDataPra : IfacePraCommon
|
{
|
/// <summary>
|
/// RequestVersion
|
/// </summary>
|
public string RequestVersion = Common.CommonPage.RequestVersion;
|
/// <summary>
|
/// Token
|
/// </summary>
|
public string LoginAccessToken = string.Empty;
|
/// <summary>
|
/// 住宅ID
|
/// </summary>
|
public string HomeId = Common.Config.Instance.Home.Id;
|
/// <summary>
|
/// 门锁的Mac地址
|
/// </summary>
|
public string DoorLockId = string.Empty;
|
/// <summary>
|
/// Config.Instance.Guid 或者 MemberInfoRes.SubAccountDistributedMark
|
/// </summary>
|
public List<string> CloudAccountIdArr = new List<string>();
|
/// <summary>
|
/// 开锁方式(0:密码、15:指纹、3:IC卡)
|
/// </summary>
|
public List<int> OpenLockModeArr = null;
|
/// <summary>
|
/// 开锁是否成功
|
/// </summary>
|
public bool? UnlockIsSuccess = null;
|
/// <summary>
|
/// 搜索开锁开始时间
|
/// </summary>
|
public DateTime UnlockTimeBegin;
|
/// <summary>
|
/// 搜索开锁结束时间
|
/// </summary>
|
public DateTime UnlockTimeEnd;
|
/// <summary>
|
/// 页数
|
/// </summary>
|
public PageSettingInfo PageSetting = new PageSettingInfo() { PageSize = 100 };
|
}
|
|
/// <summary>
|
/// 获取历史记录的结果
|
/// </summary>
|
private class GetHistoryDataResult
|
{
|
/// <summary>
|
/// 数据
|
/// </summary>
|
public List<HistoryInfo> PageData = null;
|
/// <summary>
|
/// 是否存在下一页的数据
|
/// </summary>
|
public bool HasNextPage = false;
|
}
|
|
/// <summary>
|
/// 历史记录的结果
|
/// </summary>
|
private class HistoryInfo
|
{
|
/// <summary>
|
/// 开锁方式 0:密码 15:指纹 3:IC卡
|
/// </summary>
|
public int OpenLockMode = -1;
|
/// <summary>
|
/// 开锁时间
|
/// </summary>
|
public string UnlockTime = string.Empty;
|
/// <summary>
|
/// 开锁是否成功
|
/// </summary>
|
public bool UnlockIsSuccess = false;
|
/// <summary>
|
/// 账号的ID
|
/// </summary>
|
public string CloudAccountId = string.Empty;
|
}
|
|
#endregion
|
}
|
}
|