using Shared;
|
using HDL_ON.Stan;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using HDL_ON.UI.CSS;
|
using HDL_ON.Entity;
|
|
namespace HDL_ON.UI
|
{
|
/// <summary>
|
/// 门锁的控制界面
|
/// </summary>
|
public class DoorLockPage : DeviceFunctionCardCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 电池控件
|
/// </summary>
|
private BatteryPersentControl batteryControl = null;
|
/// <summary>
|
/// 在线图标控件
|
/// </summary>
|
private IconViewControl btnOnlineIcon = null;
|
/// <summary>
|
/// 在线文本控件
|
/// </summary>
|
private NormalViewControl btnOnlineView = null;
|
/// <summary>
|
/// 声音图标
|
/// </summary>
|
private IconViewControl btnVoice = null;
|
/// <summary>
|
/// 声音的滑动条控件
|
/// </summary>
|
private SeekBarImageControl seekBarVoiceControl = null;
|
/// <summary>
|
/// 声音百分比
|
/// </summary>
|
private NormalViewControl btnVoicePersent = null;
|
/// <summary>
|
/// 常开模式图标
|
/// </summary>
|
private IconViewControl btnNormallyOpenIcon = null;
|
/// <summary>
|
/// 中间的开锁或者关锁图片控件
|
/// </summary>
|
private PicViewControl picLockControl = null;
|
/// <summary>
|
/// 临时密码tab页中间的控件容器(它的Y轴是 一键开锁/临时密码开锁的底部(粗体字体)+4)
|
/// </summary>
|
private FrameLayout frameTempPsw = null;
|
/// <summary>
|
/// 1:选择的是一键开锁 2:选择的是临时密码开锁
|
/// </summary>
|
private int nowSelectMenu = 1;
|
/// <summary>
|
/// 门锁数据
|
/// </summary>
|
private DoorLockData doorLockData = new DoorLockData();
|
/// <summary>
|
/// 门锁的历史记录
|
/// </summary>
|
private List<DoorHistoryLog> listHistoryLog = null;
|
/// <summary>
|
/// 成员列表
|
/// </summary>
|
private List<ResidenceMemberInfo> listMember = null;
|
/// <summary>
|
/// 文本缓存
|
/// </summary>
|
private Dictionary<string, string> dicText = new Dictionary<string, string>();
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 门锁的控制界面
|
/// </summary>
|
public DoorLockPage()
|
{
|
//门锁不允许收藏
|
this.ShowColltionButton = false;
|
}
|
|
/// <summary>
|
/// 初始化白色区域的内容
|
/// </summary>
|
public override void InitFrameWhiteContent()
|
{
|
//智能门锁
|
base.SetTitleText(Language.StringByID(StringId.DoorLock));
|
|
this.dicText["已连接"] = Language.StringByID(StringId.Connected);
|
this.dicText["未连接"] = Language.StringByID(StringId.UnConnected);
|
|
//左右翻页的事件
|
base.PageChangeEvent += (index) =>
|
{
|
if (index == 1)
|
{
|
//初始化门锁历史记录以及控件
|
this.InitDoorHistoryLogAndControl();
|
}
|
};
|
|
//刷新当前设备的状态缓存
|
this.RefreshNowDeviceStatuMemory(this.device);
|
//初始化第一个索引页的内容
|
this.InitFrameWhiteContent1();
|
//初始化第二个索引页(历史记录)
|
this.InitFrameWhiteContent2();
|
//刷新界面状态
|
this.RefreshFormStatu();
|
}
|
|
/// <summary>
|
/// 初始化第一个索引页的内容
|
/// </summary>
|
private void InitFrameWhiteContent1()
|
{
|
//电池控件
|
this.batteryControl = new BatteryPersentControl();
|
//它有个最小的X轴
|
batteryControl.X = Application.GetRealWidth(104) > base.btnRoomName.Right ?
|
Application.GetRealWidth(104) : base.btnRoomName.Right + Application.GetRealWidth(4);
|
FrameWhiteCentet1.AddChidren(batteryControl);
|
if (batteryControl.Height > base.btnRoomName.Height)
|
{
|
//一个是25,一个是21,弄不准到底谁更高,因为计算方法不一样
|
batteryControl.Y = base.btnRoomName.Y - (batteryControl.Height - base.btnRoomName.Height) / 2;
|
}
|
else
|
{
|
batteryControl.Y = base.btnRoomName.Y + (batteryControl.Height - base.btnRoomName.Height) / 2;
|
}
|
batteryControl.InitControl();
|
batteryControl.SetValue(100);
|
|
//在线状态
|
this.btnOnlineIcon = new IconViewControl(24);
|
btnOnlineIcon.X = batteryControl.Right + Application.GetRealWidth(12);
|
btnOnlineIcon.Y = batteryControl.Y;
|
btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/Connect.png";
|
FrameWhiteCentet1.AddChidren(btnOnlineIcon);
|
//在线文本
|
this.btnOnlineView = new NormalViewControl(Application.GetRealWidth(100), btnOnlineIcon.Height, false);
|
btnOnlineView.X = btnOnlineIcon.Right + Application.GetRealWidth(4);
|
btnOnlineView.Y = btnOnlineIcon.Y;
|
btnOnlineView.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
|
btnOnlineView.TextColor = CSS_Color.PromptingColor1;
|
btnOnlineView.TextID = StringId.Connected;
|
FrameWhiteCentet1.AddChidren(btnOnlineView);
|
//右上角配置结束的事件
|
base.SettionFinishEvent += () =>
|
{
|
//从新设置坐标
|
batteryControl.X = Application.GetRealWidth(104) > base.btnRoomName.Right ?
|
Application.GetRealWidth(104) : base.btnRoomName.Right + Application.GetRealWidth(4);
|
btnOnlineIcon.X = batteryControl.Right + Application.GetRealWidth(12);
|
btnOnlineView.X = btnOnlineIcon.Right + Application.GetRealWidth(4);
|
};
|
|
//中间的开锁或者关锁图片控件
|
this.picLockControl = new PicViewControl(256, 260);
|
picLockControl.Y = Application.GetRealHeight(129);
|
picLockControl.Gravity = Gravity.CenterHorizontal;
|
picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue1.png";
|
FrameWhiteCentet1.AddChidren(picLockControl);
|
picLockControl.ButtonClickEvent += (sender, e) =>
|
{
|
//一键开锁
|
this.DoOneKeyToUnlockDoor();
|
};
|
|
//临时密码的控件容器
|
this.frameTempPsw = new FrameLayout();
|
frameTempPsw.Y = Application.GetRealHeight(129);
|
frameTempPsw.Height = Application.GetRealHeight(260);
|
frameTempPsw.Visible = false;
|
FrameWhiteCentet1.AddChidren(frameTempPsw);
|
|
//声音
|
this.btnVoice = new IconViewControl(24);
|
btnVoice.UnSelectedImagePath = "FunctionIcon/DoorLock/Voice.png";
|
btnVoice.X = Application.GetRealWidth(23);
|
btnVoice.Y = Application.GetRealHeight(410);
|
FrameWhiteCentet1.AddChidren(btnVoice);
|
|
//声音的滑动条
|
this.seekBarVoiceControl = new SeekBarImageControl(215);
|
seekBarVoiceControl.Gravity = Gravity.CenterHorizontal;
|
FrameWhiteCentet1.AddChidren(seekBarVoiceControl);
|
seekBarVoiceControl.Y = btnVoice.Y - (seekBarVoiceControl.Height - btnVoice.Height) / 2;
|
//绑定PageLayout控件
|
seekBarVoiceControl.BindPageLayout();
|
|
//声音百分比
|
this.btnVoicePersent = new NormalViewControl(Application.GetRealWidth(50), btnVoice.Height, false);
|
btnVoicePersent.X = seekBarVoiceControl.Right + Application.GetRealWidth(8) - seekBarVoiceControl.SeekBarPadding;
|
btnVoicePersent.Y = btnVoice.Y;
|
btnVoicePersent.TextColor = CSS_Color.PromptingColor1;
|
btnVoicePersent.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
|
btnVoicePersent.Text = "100%";
|
FrameWhiteCentet1.AddChidren(btnVoicePersent);
|
|
seekBarVoiceControl.ProgressChangedEvent += (div, value) =>
|
{
|
btnVoicePersent.Text = value + "%";
|
if (div == 1)
|
{
|
}
|
};
|
|
//初始化开锁菜单(一键开锁,临时密码开锁)
|
this.InitUnLockMenuControl();
|
//初始化底部菜单图标
|
this.InitBottomMenuIconControl();
|
}
|
|
/// <summary>
|
/// 初始化开锁菜单(一键开锁,临时密码开锁)
|
/// </summary>
|
private void InitUnLockMenuControl()
|
{
|
//如果是成员,则只有一键开锁
|
if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == true)
|
{
|
//一键开锁
|
var btnOneKey = new NormalViewControl(100, 25, true);
|
btnOneKey.Y = Application.GetRealHeight(100);
|
btnOneKey.TextSize = CSS_FontSize.HeadlineFontSize;
|
btnOneKey.TextColor = CSS_Color.MainColor;
|
btnOneKey.Text = Language.StringByID(StringId.OneKeyUnlocking);
|
btnOneKey.Width = this.GetTextRealWidth(btnOneKey.Text, CSS_FontSize.HeadlineFontSize, true);
|
btnOneKey.Gravity = Gravity.CenterHorizontal;
|
btnOneKey.IsBold = true;
|
FrameWhiteCentet1.AddChidren(btnOneKey);
|
}
|
else
|
{
|
//一键开锁
|
var btnOneKey = new NormalViewControl(100, 25, true);
|
btnOneKey.Y = Application.GetRealHeight(100);
|
btnOneKey.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize;
|
btnOneKey.TextColor = CSS_Color.MainColor;
|
btnOneKey.Text = Language.StringByID(StringId.OneKeyUnlocking);
|
btnOneKey.TextAlignment = TextAlignment.CenterRight;
|
btnOneKey.IsBold = true;
|
btnOneKey.Width = this.GetTextRealWidth(btnOneKey.Text, CSS_FontSize.HeadlineFontSize, true);
|
FrameWhiteCentet1.AddChidren(btnOneKey);
|
btnOneKey.X = Application.GetRealWidth(140) - btnOneKey.Width;
|
|
//临时密码开锁
|
var btnTempPsw = new NormalViewControl(100, 25, true);
|
btnTempPsw.X = btnOneKey.Right + Application.GetRealWidth(36);
|
btnTempPsw.Y = btnOneKey.Y;
|
btnTempPsw.TextColor = CSS_Color.PromptingColor1;
|
btnTempPsw.Text = Language.StringByID(StringId.TemporaryPasswordUnlocking);
|
btnTempPsw.Width = this.GetTextRealWidth(btnTempPsw.Text, CSS_FontSize.HeadlineFontSize, true);
|
FrameWhiteCentet1.AddChidren(btnTempPsw);
|
|
btnOneKey.ButtonClickEvent += (sender, e) =>
|
{
|
//选择的是同一个,则不处理
|
if (this.nowSelectMenu == 1) { return; }
|
this.nowSelectMenu = 1;
|
|
btnOneKey.IsBold = true;
|
btnOneKey.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize;
|
btnOneKey.TextColor = CSS_Color.MainColor;
|
|
btnTempPsw.IsBold = false;
|
btnTempPsw.TextSize = CSS_FontSize.TextFontSize;
|
btnTempPsw.TextColor = CSS_Color.PromptingColor1;
|
|
//设置中间容器控件可视化
|
this.SetMiddleFrameControlVisible();
|
};
|
|
btnTempPsw.ButtonClickEvent += (sender, e) =>
|
{
|
//选择的是同一个,则不处理
|
if (this.nowSelectMenu == 2) { return; }
|
this.nowSelectMenu = 2;
|
|
btnOneKey.IsBold = false;
|
btnOneKey.TextSize = CSS_FontSize.TextFontSize;
|
btnOneKey.TextColor = CSS_Color.PromptingColor1;
|
|
btnTempPsw.IsBold = true;
|
btnTempPsw.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize;
|
btnTempPsw.TextColor = CSS_Color.MainColor;
|
|
//设置中间容器控件可视化
|
this.SetMiddleFrameControlVisible();
|
};
|
}
|
}
|
|
#endregion
|
|
#region ■ 初始化第二个索引页(历史记录)_______
|
|
/// <summary>
|
/// 初始化第二个索引页(历史记录)
|
/// </summary>
|
private void InitFrameWhiteContent2()
|
{
|
//添加第二个page
|
this.AddSecondPage();
|
}
|
|
/// <summary>
|
/// 初始化门锁历史记录以及控件
|
/// </summary>
|
private void InitDoorHistoryLogAndControl()
|
{
|
//已经初始化
|
if (this.listHistoryLog != null) { return; }
|
|
this.ShowProgressBar();
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
//初始化成员列表信息
|
if (this.InitMemberListInfo() == false)
|
{
|
this.CloseProgressBar();
|
return;
|
}
|
//获取门锁历史记录
|
this.listHistoryLog = new DAL.Server.HttpServerRequest().GetDoorHistoryLogs(this.device);
|
this.CloseProgressBar();
|
if (this.listHistoryLog == null)
|
{
|
return;
|
}
|
HdlThreadLogic.Current.RunMain(() =>
|
{
|
//初始化门锁历史记录列表控件
|
this.InitDoorHistoryLogListControl(this.listHistoryLog);
|
});
|
});
|
}
|
|
/// <summary>
|
/// 初始化门锁历史记录列表控件
|
/// </summary>
|
/// <param name="listLog">显示的门锁记录</param>
|
private void InitDoorHistoryLogListControl(List<DoorHistoryLog> listLog)
|
{
|
//按年分组
|
var dicData = new Dictionary<int, List<DoorHistoryLog>>();
|
foreach (var info in listLog)
|
{
|
var year = info.Time.Year;
|
if (dicData.ContainsKey(year) == false)
|
{
|
dicData[year] = new List<DoorHistoryLog>();
|
}
|
dicData[year].Add(info);
|
}
|
|
//先清空
|
base.FrameWhiteCentet2.RemoveAll();
|
|
//日志
|
var btnLog = new NormalViewControl(150, 35, true);
|
btnLog.Y = Application.GetRealHeight(15);
|
btnLog.X = HdlControlResourse.XXLeft;
|
btnLog.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
|
btnLog.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnLog.TextID = StringId.Log;
|
FrameWhiteCentet2.AddChidren(btnLog);
|
|
//列表容器
|
var listView = new VerticalFrameControl();
|
listView.Y = Application.GetRealHeight(72);
|
listView.Height = base.FrameWhiteCentet2.Height - Application.GetRealHeight(72);
|
base.FrameWhiteCentet2.AddChidren(listView);
|
|
//初始Y轴为0
|
int yy = 0;
|
foreach (var strYear in dicData.Keys)
|
{
|
//年
|
var btnYear = new NormalViewControl(100, 24, true);
|
btnYear.X = HdlControlResourse.XXLeft;
|
btnYear.Y = yy;
|
btnYear.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnYear.TextSize = CSS_FontSize.SubheadingFontSize;
|
btnYear.Text = strYear.ToString();
|
//中文
|
if (Language.CurrentLanguage == "Chinese")
|
{
|
btnYear.Text += Language.StringByID(StringId.Years);
|
}
|
listView.frameTable.AddChidren(btnYear);
|
|
//年与消息记录的间距为14
|
yy = btnYear.Bottom + Application.GetRealHeight(14);
|
foreach (var logInfo in dicData[strYear])
|
{
|
//消息
|
var btnMsg = new NormalViewControl(295, 20, true);
|
btnMsg.Y = yy;
|
btnMsg.Gravity = Gravity.CenterHorizontal;
|
btnMsg.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnMsg.Text = logInfo.StrMsg;
|
listView.frameTable.AddChidren(btnMsg);
|
//时间
|
var btnTime = new NormalViewControl(200, 18, true);
|
btnTime.Y = btnMsg.Bottom + Application.GetRealHeight(2);
|
btnTime.X = btnMsg.X;
|
btnTime.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
|
btnTime.TextColor = CSS_Color.PromptingColor1;
|
btnTime.Text = HdlCommonLogic.Current.ConvertDayText(logInfo.Time.Month, logInfo.Time.Day) + " " + logInfo.Time.ToString("HH:mm");
|
listView.frameTable.AddChidren(btnTime);
|
//线
|
var btnLine = new NormalViewControl(btnMsg.Width, HdlControlResourse.BottomLineHeight, false);
|
btnLine.Y = btnTime.Bottom + Application.GetRealHeight(11);
|
btnLine.Gravity = Gravity.CenterHorizontal;
|
btnLine.BackgroundColor = CSS_Color.DividingLineColor;
|
listView.frameTable.AddChidren(btnLine);
|
//两条消息的间距为10
|
yy = btnLine.Bottom + Application.GetRealHeight(10);
|
}
|
//年与年之间的间距为24
|
yy += Application.GetRealHeight(24);
|
}
|
//调整桌布高度
|
listView.AdjustTableHeight();
|
}
|
|
#endregion
|
|
#region ■ 初始化底部菜单图标_________________
|
|
/// <summary>
|
/// 初始化底部菜单图标
|
/// </summary>
|
private void InitBottomMenuIconControl()
|
{
|
//如果是成员,则只有开锁方式管理
|
if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == true)
|
{
|
//开锁方式管理图标
|
var btnManagerIcon = new IconViewControl(40);
|
btnManagerIcon.Gravity = Gravity.CenterHorizontal;
|
btnManagerIcon.Y = Application.GetRealHeight(466);
|
btnManagerIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnLockManager.png";
|
this.FrameWhiteCentet1.AddChidren(btnManagerIcon);
|
btnManagerIcon.ButtonClickEvent += (sender, e) =>
|
{
|
//初始化成员列表信息
|
if (this.InitMemberListInfo() == false)
|
{
|
return;
|
}
|
var form = new DoorLockUnlockMethordManagerPage();
|
form.AddForm(this.device, this.listMember);
|
};
|
}
|
else
|
{
|
//开锁方式管理图标
|
var btnManagerIcon = new IconViewControl(40);
|
btnManagerIcon.Y = Application.GetRealHeight(466);
|
btnManagerIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnLockManager.png";
|
this.FrameWhiteCentet1.AddChidren(btnManagerIcon);
|
btnManagerIcon.X = (this.FrameWhiteCentet1.Width - btnManagerIcon.Width * 2 - Application.GetRealWidth(40)) / 2;
|
btnManagerIcon.ButtonClickEvent += (sender, e) =>
|
{
|
//初始化成员列表信息
|
if (this.InitMemberListInfo() == false)
|
{
|
return;
|
}
|
var form = new DoorLockUnlockMethordManagerPage();
|
form.AddForm(this.device, this.listMember);
|
};
|
|
//常开模式图标
|
this.btnNormallyOpenIcon = new IconViewControl(40);
|
btnNormallyOpenIcon.X = btnManagerIcon.Right + Application.GetRealWidth(40);
|
btnNormallyOpenIcon.Y = btnManagerIcon.Y;
|
btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon2.png";
|
this.FrameWhiteCentet1.AddChidren(btnNormallyOpenIcon);
|
btnNormallyOpenIcon.ButtonClickEvent += (sender, e) =>
|
{
|
var form = new DoorLockAlwaysOnListPage();
|
form.AddForm(this.device);
|
};
|
}
|
}
|
|
#endregion
|
|
#region ■ 初始化临时密码控件_________________
|
|
/// <summary>
|
/// 初始化临时密码控件
|
/// </summary>
|
private void InitTempPasswordControl()
|
{
|
this.frameTempPsw.RemoveAll();
|
|
//生成临时密码的背景图片
|
var picBack = new PicViewControl(258, 165);
|
picBack.Gravity = Gravity.CenterHorizontal;
|
picBack.UnSelectedImagePath = "FunctionIcon/DoorLock/CrearPswBackgroud.png";
|
this.frameTempPsw.AddChidren(picBack);
|
|
//密码显示控件
|
var btnPassword = new NormalViewControl(150, 50, true);
|
btnPassword.Gravity = Gravity.CenterHorizontal;
|
btnPassword.TextSize = CSS_FontSize.SubheadingFontSize;
|
btnPassword.TextColor = CSS_Color.MainBackgroundColor;
|
btnPassword.TextAlignment = TextAlignment.Center;
|
this.frameTempPsw.AddChidren(btnPassword);
|
|
//如果没有临时密码
|
if (this.doorLockData.TempPassword == string.Empty)
|
{
|
//当没有临时密码时,这个背景放在中间
|
picBack.Y = Application.GetRealHeight(47);
|
//因为图片的压缩问题,这个Y轴和蓝湖的不一样,蓝湖是99
|
btnPassword.Y = Application.GetRealHeight(88);
|
|
//生成临时密码
|
btnPassword.TextID = StringId.CreatTemporaryPassword;
|
btnPassword.ButtonClickEvent += (sender, e) =>
|
{
|
//显示生成临时密码的弹窗界面
|
this.ShowCreatTemporaryPasswordDialog(DateTime.Now, DateTime.Now.AddDays(1).AddMinutes(-1));
|
};
|
}
|
//拥有临时密码
|
else
|
{
|
//显示临时密码
|
btnPassword.Text = this.doorLockData.TempPassword;
|
//因为图片的压缩问题,这个Y轴和蓝湖的不一样,蓝湖是51
|
btnPassword.Y = Application.GetRealHeight(40);
|
|
//删除临时密码图标
|
var btnDelete = new IconViewControl(28);
|
btnDelete.UnSelectedImagePath = "FunctionIcon/DoorLock/Delete.png";
|
btnDelete.X = Application.GetRealWidth(19);
|
btnDelete.Y = Application.GetRealHeight(115);
|
this.frameTempPsw.AddChidren(btnDelete);
|
btnDelete.ButtonClickEvent += (sender, e) =>
|
{
|
//清除当前临时密码?
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.ClearTempPsswordMsg), () =>
|
{
|
//清空临时密码
|
this.doorLockData.TempPassword = string.Empty;
|
this.doorLockData.StatrtTime = string.Empty;
|
this.doorLockData.EndTime = string.Empty;
|
//重新初始化临时密码控件
|
this.InitTempPasswordControl();
|
});
|
};
|
|
//复制临时密码图标
|
var btnCopy = new IconViewControl(28);
|
btnCopy.UnSelectedImagePath = "FunctionIcon/DoorLock/Shard.png";
|
btnCopy.X = this.frameTempPsw.Width - btnCopy.IconSize - btnDelete.X;
|
btnCopy.Y = btnDelete.Y;
|
this.frameTempPsw.AddChidren(btnCopy);
|
btnCopy.ButtonClickEvent += (sender, e) =>
|
{
|
//临时密码已经复制
|
HdlCommonLogic.Current.SetTextToShearPlate(this.doorLockData.TempPassword, Language.StringByID(StringId.TempPsswordHasBeenCopy));
|
};
|
|
//生效时间
|
var frameEffective = this.CreatEffectiveTimeControl(this.frameTempPsw, Language.StringByID(StringId.EffectiveTime), this.doorLockData.StatrtTime);
|
frameEffective.X = Application.GetRealWidth(24);
|
frameEffective.Y = Application.GetRealHeight(180);
|
|
//失效时间
|
var frameFailure = this.CreatEffectiveTimeControl(this.frameTempPsw, Language.StringByID(StringId.FailureTime), this.doorLockData.EndTime);
|
frameFailure.X = this.frameTempPsw.Width - frameFailure.Width - frameEffective.X;
|
frameFailure.Y = frameEffective.Y;
|
|
//-
|
var btnLine = new NormalViewControl(frameFailure.X - frameEffective.Right, frameFailure.Height, false);
|
btnLine.X = frameEffective.Right;
|
btnLine.Y = frameEffective.Y;
|
btnLine.Text = "-";
|
btnLine.TextAlignment = TextAlignment.Center;
|
btnLine.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnLine.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
|
this.frameTempPsw.AddChidren(btnLine);
|
}
|
}
|
|
/// <summary>
|
/// 生成生效/失效时间控件
|
/// </summary>
|
/// <param name="frameTempPsw">父控件</param>
|
/// <param name="i_text">显示的文本</param>
|
/// <param name="i_time">显示的时间</param>
|
/// <returns></returns>
|
private FrameLayout CreatEffectiveTimeControl(FrameLayout frameTempPsw, string i_text, string i_time)
|
{
|
//线框背景控件
|
var frameBack = new FrameLayout();
|
frameBack.Width = Application.GetRealWidth(120);
|
frameBack.Height = Application.GetRealHeight(50);
|
frameBack.Radius = (uint)Application.GetRealWidth(7);
|
frameBack.BorderWidth = 1;
|
frameBack.BorderColor = CSS_Color.PromptingColor1;
|
frameTempPsw.AddChidren(frameBack);
|
|
//显示文本
|
var btnText = new NormalViewControl(frameBack.Width, Application.GetRealHeight(18), false);
|
btnText.Y = Application.GetRealHeight(8);
|
btnText.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnText.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
|
btnText.Text = i_text;
|
btnText.TextAlignment = TextAlignment.Center;
|
frameBack.AddChidren(btnText);
|
|
//显示时间
|
var btnTime = new NormalViewControl(frameBack.Width, Application.GetRealHeight(18), false);
|
btnTime.Y = btnText.Bottom;
|
btnTime.TextColor = CSS_Color.FirstLevelTitleColor;
|
btnTime.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
|
btnTime.Text = i_time;
|
btnTime.TextAlignment = TextAlignment.Center;
|
frameBack.AddChidren(btnTime);
|
|
return frameBack;
|
}
|
|
#endregion
|
|
#region ■ 生成临时密码_______________________
|
|
/// <summary>
|
/// 显示生成临时密码的弹窗界面
|
/// </summary>
|
private void ShowCreatTemporaryPasswordDialog(DateTime startTime, DateTime endTime)
|
{
|
//默认时间Form-To为一天
|
var contr = new BottomItemEditorControl(2, string.Empty);
|
//点击确认时,不关闭界面
|
contr.CloseByConfirm = false;
|
|
//生效时间
|
var effectiveTime = Language.StringByID(StringId.EffectiveTime);
|
contr.AddRowMenu(effectiveTime, startTime.ToString("yyyy.MM.dd HH:mm"), (btnView, btnValue) =>
|
{
|
//关掉界面,然后重新调起来
|
contr.Close();
|
|
var form = new DoorLockSelectTimePage();
|
form.AddForm(startTime);
|
form.SelectFinshEvent += (selectTime) =>
|
{
|
//重新调起界面
|
this.ShowCreatTemporaryPasswordDialog(selectTime, endTime);
|
};
|
});
|
|
//失效时间
|
var failTime = Language.StringByID(StringId.FailureTime);
|
contr.AddRowMenu(failTime, endTime.ToString("yyyy.MM.dd HH:mm"), (btnView, btnValue) =>
|
{
|
//关掉界面,然后重新调起来
|
contr.Close();
|
|
var form = new DoorLockSelectTimePage();
|
form.AddForm(endTime);
|
form.SelectFinshEvent += (selectTime) =>
|
{
|
//重新调起界面
|
this.ShowCreatTemporaryPasswordDialog(startTime, selectTime);
|
};
|
});
|
contr.FinishEvent += (div) =>
|
{
|
//点击了生成
|
if (div == 1)
|
{
|
if (this.CheckEffectiveTime(startTime, endTime) == false)
|
{
|
return;
|
}
|
//关掉界面
|
contr.Close();
|
|
//生成临时密码
|
this.doorLockData.TempPassword = "987654";
|
this.doorLockData.StatrtTime = startTime.ToString("yyyy.MM.dd HH:mm");
|
this.doorLockData.EndTime = endTime.ToString("yyyy.MM.dd HH:mm");
|
//重新初始化临时密码控件
|
this.InitTempPasswordControl();
|
}
|
};
|
|
//需要初始化之后,按钮才不会为null 变更【生成】按钮的宽度和X轴
|
contr.btnConfirm.TextID = StringId.Generate;
|
contr.btnConfirm.Width = contr.btnConfirm.GetRealWidthByText();
|
contr.btnConfirm.X = contr.btnConfirm.Parent.Width - contr.btnConfirm.Width - contr.btnCancel.X;
|
}
|
|
/// <summary>
|
/// 检测生效时间是否正确
|
/// </summary>
|
/// <param name="startTime">生效时间</param>
|
/// <param name="endTime">失效时间</param>
|
/// <returns></returns>
|
private bool CheckEffectiveTime(DateTime startTime, DateTime endTime)
|
{
|
if (startTime >= endTime)
|
{
|
//生效时间必须大于失效时间
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(StringId.EffectiveTimeMustBeOverFailureTime));
|
return false;
|
}
|
return true;
|
}
|
|
#endregion
|
|
#region ■ 设备状态反馈_______________________
|
|
/// <summary>
|
/// 设备状态反馈
|
/// </summary>
|
/// <param name="i_LocalDevice"></param>
|
public override void DeviceStatuPush(Function i_LocalDevice)
|
{
|
//不是同一个东西
|
if (this.device.sid != i_LocalDevice.sid) { return; }
|
|
//刷新当前设备的状态缓存
|
this.RefreshNowDeviceStatuMemory(i_LocalDevice);
|
//刷新界面状态
|
this.RefreshFormStatu();
|
}
|
|
#endregion
|
|
#region ■ 刷新界面状态_______________________
|
|
/// <summary>
|
/// 刷新界面状态
|
/// </summary>
|
private void RefreshFormStatu()
|
{
|
//如果不在线
|
if (this.doorLockData.IsOnline == false)
|
{
|
//开锁图片
|
this.picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue2.png";
|
//连接状态
|
this.btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnConnect.png";
|
this.btnOnlineView.Text = this.dicText["未连接"];
|
this.btnOnlineView.TextColor = CSS_Color.AuxiliaryColor2;
|
//常开模式图标
|
if (this.btnNormallyOpenIcon != null)
|
{
|
this.btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon2.png";
|
}
|
}
|
else
|
{
|
//开锁图片
|
this.picLockControl.UnSelectedImagePath = this.doorLockData.Open == true ? "FunctionIcon/DoorLock/UnLockPictrue3.png" : "FunctionIcon/DoorLock/LockPictrue1.png";
|
//连接状态
|
this.btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/Connect.png";
|
this.btnOnlineView.Text = this.dicText["已连接"];
|
this.btnOnlineView.TextColor = CSS_Color.PromptingColor1;
|
//常开模式图标
|
if (this.btnNormallyOpenIcon != null)
|
{
|
this.btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon1.png";
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置中间容器控件可视化
|
/// </summary>
|
private void SetMiddleFrameControlVisible()
|
{
|
//如果选择的是 一键开锁
|
if (this.nowSelectMenu == 1)
|
{
|
this.picLockControl.Visible = true;
|
this.frameTempPsw.Visible = false;
|
}
|
else
|
{
|
this.picLockControl.Visible = false;
|
this.frameTempPsw.Visible = true;
|
//临时密码已经变更,需要刷新界面
|
if (this.doorLockData.IsTempPasswordChanged == true)
|
{
|
//初始化临时密码控件
|
this.InitTempPasswordControl();
|
this.doorLockData.IsTempPasswordChanged = false;
|
}
|
}
|
}
|
|
#endregion
|
|
#region ■ 发送各种命令_______________________
|
|
/// <summary>
|
/// 发送开关命令
|
/// </summary>
|
private void SendSwitchComand()
|
{
|
//this.btnSwitch.CanClick = false;
|
|
//string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
|
//HdlThreadLogic.Current.RunThread(() =>
|
//{
|
// var dic = new Dictionary<string, string>();
|
// dic.Add(FunctionAttributeKey.OnOff, statu);
|
// Control.Ins.SendWriteCommand(this.device, dic, true);
|
// HdlThreadLogic.Current.RunMain(() =>
|
// {
|
// this.btnSwitch.CanClick = true;
|
// });
|
//});
|
}
|
|
#endregion
|
|
#region ■ 初始化成员列表信息_________________
|
|
/// <summary>
|
/// 初始化成员列表信息
|
/// </summary>
|
/// <returns></returns>
|
private bool InitMemberListInfo()
|
{
|
//已经初始化
|
if (this.listMember != null) { return true; }
|
|
//主账号需要去获取成员列表,而子账号只能他自己
|
if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == false)
|
{
|
//获取成员列表
|
var responePack = new DAL.Server.HttpServerRequest().GetResidenceMemberAccount();
|
if (responePack.Code == DAL.Server.StateCode.SUCCESS)
|
{
|
this.listMember = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceMemberInfo>>(responePack.Data.ToString());
|
}
|
//失败
|
else
|
{
|
//提示
|
DAL.Server.IMessageCommon.Current.ShowErrorInfoAlter(responePack.Code);
|
return false;
|
}
|
}
|
else
|
{
|
//先初始化
|
this.listMember = new List<ResidenceMemberInfo>();
|
}
|
|
//自身加进去,自己位于首位
|
var info = new ResidenceMemberInfo();
|
info.childAccountId = OnAppConfig.Instance.LastLoginUserId;
|
info.childAccountType = DB_ResidenceData.Instance.CurrentRegion.isOtherShare == false ? "ADMIN" : "ORDINARY";
|
info.nickName = UserInfo.Current.userName;
|
this.listMember.Insert(0, info);
|
if (string.IsNullOrEmpty(info.nickName))
|
{
|
info.nickName = UserInfo.Current.AccountString;
|
}
|
|
foreach (var info2 in this.listMember)
|
{
|
//设置用户昵称
|
if (string.IsNullOrEmpty(info2.nickName))
|
{
|
info2.nickName = info2.memberName;
|
}
|
}
|
|
return true;
|
}
|
#endregion
|
|
#region ■ 一键开锁___________________________
|
|
/// <summary>
|
/// 一键开锁
|
/// </summary>
|
private void DoOneKeyToUnlockDoor()
|
{
|
if (this.doorLockData.IsOnline == false)
|
{
|
//设备不在线
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.TipRemind, Language.StringByID(StringId.DeviceNotOnline), null, null, null, 2);
|
return;
|
}
|
//第一次使用,请先绑定门锁密码
|
//HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.PleaseBindTheDoorPswFirst), () =>
|
//{
|
// var form = new TextInputDialog(Language.StringByID(StringId.PleaseInputDoorAdminPassword), string.Empty, Language.StringByID(StringId.PleaseInputDoorAdminPassword), null, null, true);
|
// form.Show((password) =>
|
// {
|
// //门锁绑定成功
|
// HdlMessageLogic.Current.ShowMassage(ShowMsgType.ConfirmSuccess, Language.StringByID(StringId.BindDoorLockSuccess), () =>
|
// {
|
// });
|
// });
|
//});
|
|
if (UserInfo.Current.appUnlockPage.Contains("3") == true)
|
{
|
//调起安全认证
|
HdlCheckLogic.Current.CheckUnlockSecurity(true, (div) =>
|
{
|
//锁已打开
|
if (div == 1)
|
{
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.TipSuccess, Language.StringByID(StringId.LockIsOpened), null, null, null, 2);
|
}
|
else
|
{
|
//为了安全,请跳转至个人中心{0}设置个人密码,并应用于门锁开锁
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.JumpToPersonalCentetToSetPasswordMsg), () =>
|
{
|
var page = new AppUnlockSettingsPage();
|
MainPage.BasePageView.AddChidren(page);
|
page.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
|
}, Language.StringByID(StringId.Jump));
|
}
|
});
|
}
|
else
|
{
|
//为了安全,请跳转至个人中心{0}设置个人密码,并应用于门锁开锁
|
HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.JumpToPersonalCentetToSetPasswordMsg), () =>
|
{
|
var page = new AppUnlockSettingsPage();
|
MainPage.BasePageView.AddChidren(page);
|
page.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
|
}, Language.StringByID(StringId.Jump));
|
}
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 刷新当前设备的状态缓存
|
/// </summary>
|
private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
|
{
|
this.doorLockData.IsOnline = i_LocalDevice.online;
|
for (int i = 0; i < i_LocalDevice.attributes.Count; i++)
|
{
|
var data = i_LocalDevice.attributes[i];
|
//门锁状态
|
if (data.key == "status")
|
{
|
if (data.state == "open") { this.doorLockData.Open = true; }
|
else if (data.state == "normal_open")
|
{
|
//常开模式
|
this.doorLockData.Open = true;
|
this.doorLockData.NormalOpen = true;
|
}
|
else
|
{
|
this.doorLockData.Open = false;
|
this.doorLockData.NormalOpen = false;
|
}
|
}
|
//音量
|
else if (data.key == "volume")
|
{
|
var value = data.state;
|
if (value != string.Empty)
|
{
|
this.doorLockData.Voice = Convert.ToInt32(value);
|
}
|
}
|
//电池百分比
|
else if (data.key == "battery_percentage")
|
{
|
var value = data.state;
|
if (value != string.Empty)
|
{
|
this.doorLockData.BatteryPersent = Convert.ToInt32(value);
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
#region ■ 结构体_____________________________
|
|
/// <summary>
|
/// 门锁的数据
|
/// </summary>
|
private class DoorLockData
|
{
|
/// <summary>
|
/// 是否打开
|
/// </summary>
|
public bool Open = true;
|
/// <summary>
|
/// 电池电量
|
/// </summary>
|
public int BatteryPersent = 0;
|
/// <summary>
|
/// 是否在线
|
/// </summary>
|
public bool IsOnline = false;
|
/// <summary>
|
/// 是否静音
|
/// </summary>
|
public bool Mute = false;
|
/// <summary>
|
/// 音量
|
/// </summary>
|
public int Voice = 0;
|
/// <summary>
|
/// 是否处于常开模式
|
/// </summary>
|
public bool NormalOpen = false;
|
/// <summary>
|
/// 临时密码
|
/// </summary>
|
public string TempPassword = string.Empty;
|
/// <summary>
|
/// 临时密码是否被变更
|
/// </summary>
|
public bool IsTempPasswordChanged = true;
|
/// <summary>
|
/// 临时密码生效时间(2020.03.17 13:27)
|
/// </summary>
|
public string StatrtTime = string.Empty;
|
/// <summary>
|
/// 临时密码失效时间(2020.03.17 13:27)
|
/// </summary>
|
public string EndTime = string.Empty;
|
}
|
|
#endregion
|
}
|
}
|