using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserCenter.Device; using ZigBee.Device; namespace Shared.Phone.UserCenter.DoorLock { public class MemberFrozenPage : DoorLockCommonLayout { /// /// 构造函数 /// /// public MemberFrozenPage(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes accountObj) { this.doorLock = doorLock; this.curAccountObj = accountObj; BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor; } #region 变量申明 /// /// 当前门锁 /// ZigBee.Device.DoorLock doorLock; /// /// 当前成员对象v /// Shared.Phone.UserCenter.MemberInfoRes curAccountObj; /// /// 刷新View /// VerticalRefreshLayout bodyView; #endregion /// /// 初始化数据信息 /// void ReadDoorLockUserInfo() { System.Threading.Tasks.Task.Run(async () => { try { var list = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllAcountUserlist(doorLock); var result = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, curAccountObj.SubAccountDistributedMark); var result1 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, curAccountObj.SubAccountDistributedMark); var result2 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockOperateAccess(doorLock, curAccountObj?.SubAccountDistributedMark); if (result2 == true) { doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark] = true; } else { doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark] = false; } var result3 = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockUnlockAccess(doorLock, curAccountObj.SubAccountDistributedMark); if (result3 == true) { doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark] = true; } else { doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark] = false; } } catch { } finally { Application.RunOnMainThread(() => { MidRefresh(); bodyView.EndHeaderRefreshing(); }); } }); } /// /// UI显示 /// public void Show() { string accountTitle = ""; if (curAccountObj.UserName != null) { accountTitle = curAccountObj.UserName; } else { accountTitle = curAccountObj.Account; } this.TopFrameLayout(this, accountTitle); EventHandler eHandlerBack = (sender, e) => { RemoveFromParent(); }; this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; this.MidFrameLayout(this); bodyView = new VerticalRefreshLayout() { }; this.midFrameLayout.AddChidren(bodyView); MidRefresh(); bodyView.BeginHeaderRefreshingAction += () => { bodyView.BeginHeaderRefreshing(); ReadDoorLockUserInfo(); }; } /// /// 中部布局 /// public async void MidRefresh() { bodyView.RemoveAll(); for (int i = 0; i < 3; i++) { var RowView = new FrameLayout() { Height = Application.GetRealHeight(127 + 23), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, }; bodyView.AddChidren(RowView); var btnText = new Button() { X = Application.GetRealWidth(58), Width = Application.GetRealWidth(300), TextAlignment = TextAlignment.CenterLeft, TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText, Gravity = Gravity.CenterVertical, TextSize = 14, }; RowView.AddChidren(btnText); var btnRightFrameLayout = new FrameLayout() { Width = Application.GetRealWidth(204), X = Application.GetRealWidth(919 - 58), Y = Application.GetRealHeight(25), }; RowView.AddChidren(btnRightFrameLayout); var btnRight = new Button() { Height = Application.GetRealHeight(60), Width = Application.GetRealWidth(60), X = Application.GetRealWidth(72), Y = Application.GetRealHeight(32), UnSelectedImagePath = "DoorLock/RightIcon.png", }; btnRightFrameLayout.AddChidren(btnRight); var line2 = new Button() { Y = RowView.Height - 1, X = Application.GetRealWidth(58), Width = Application.GetRealWidth(962), Height = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, }; RowView.AddChidren(line2); if (i == 0) { btnText.Text = Language.StringByID(R.MyInternationalizationString.LockMethod); } else if (i == 1) { btnText.Text = Language.StringByID(R.MyInternationalizationString.FrozenUser); btnRight.X = Application.GetRealWidth(50); btnRight.Y = Application.GetRealHeight(32); btnRight.Height = Application.GetRealHeight(63); btnRight.Width = Application.GetRealWidth(104); btnRight.UnSelectedImagePath = "DoorLock/Switch.png"; btnRight.SelectedImagePath = "DoorLock/SwitchOn.png"; var result = doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark]; if (result == true) { btnRight.IsSelected = true; } else { btnRight.IsSelected = false; } } else if (i == 2) { if (doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark] == false) { btnText.Text = Language.StringByID(R.MyInternationalizationString.TempUnlockPermission); btnRight.X = Application.GetRealWidth(50); btnRight.Y = Application.GetRealHeight(32); btnRight.Height = Application.GetRealHeight(63); btnRight.Width = Application.GetRealWidth(104); btnRight.UnSelectedImagePath = "DoorLock/Switch.png"; btnRight.SelectedImagePath = "DoorLock/SwitchOn.png"; line2.Visible = false; var result1 = doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark]; if (result1 == true) { btnRight.IsSelected = true; } else { btnRight.IsSelected = false; } } else { btnText.Width = 0; btnRight.Width = 0; line2.Width = 0; RowView.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout; } } int currentIndex = i; EventHandler eHandler = (sender, e) => { if (currentIndex == 0) { var unLockMethod = new Shared.Phone.UserCenter.DoorLock.UnLockMethod(doorLock, curAccountObj); Shared.Phone.UserView.HomePage.Instance.AddChidren(unLockMethod); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; unLockMethod.Show(); } else if (currentIndex == 1) { if (!btnRight.IsSelected) { FreezeUser(true); } else { FreezeUser(false); } } else if (currentIndex == 2) { if (!btnRight.IsSelected) { HasRemoteUnlockAccessMethod(true); } else { HasRemoteUnlockAccessMethod(false); } } }; if (i == 0) { btnRightFrameLayout.MouseUpEventHandler += eHandler; btnRight.MouseUpEventHandler += eHandler; RowView.MouseUpEventHandler += eHandler; btnText.MouseUpEventHandler += eHandler; } else if (i == 1) { btnRightFrameLayout.MouseUpEventHandler += eHandler; btnRight.MouseUpEventHandler += eHandler; } else if (i == 2) { btnRightFrameLayout.MouseUpEventHandler += eHandler; btnRight.MouseUpEventHandler += eHandler; } } } /// /// 冻结账户 /// /// void FreezeUser(bool isFreeze) { var dialog = new Dialog { }; string textFreeze = ""; if (isFreeze) { textFreeze = Language.StringByID(R.MyInternationalizationString.SureToFreezeAccount); } else { textFreeze = Language.StringByID(R.MyInternationalizationString.SureToUnFreeze); } string msg = Language.StringByID(R.MyInternationalizationString.GoPersonalCenter); var alert = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, textFreeze, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm)); alert.Show(); //使用确认型弹框时,的回调函数 alert.ConfirmClickEvent += () => { System.Threading.Tasks.Task.Run(async () => { int successConunt = 0; int operateConunt = -1; Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); try { var doorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; var curAccountDoorLockUserList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetAccountDoorLockUserList(doorLock, curAccountObj.SubAccountDistributedMark); if (curAccountDoorLockUserList.Count != 0) { //修改云端存储信息 operateConunt = curAccountDoorLockUserList.Count; var tempGroupId = new List>(); var tempUserIdList = new List { }; foreach (var curDoorLockUser in curAccountDoorLockUserList) { // 账户中没有门锁用户 if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId)) { } else { if (tempUserIdList.Count == 9) { tempGroupId.Add(tempUserIdList); tempUserIdList = new List(); } tempUserIdList.Add(int.Parse(curDoorLockUser.DoorLockLocalUserId)); } } tempGroupId.Add(tempUserIdList); //批量冻结门锁中的账户 ZigBee.Device.DoorLock.AccessType accessType; if (isFreeze) { accessType = ZigBee.Device.DoorLock.AccessType.DisEnableMoreUsers; } else { accessType = ZigBee.Device.DoorLock.AccessType.EnableMoreUsers; } //冻结/解冻用户 int count1 = tempGroupId.Count; if (tempGroupId.Count == 1) { foreach (var a in tempGroupId) { if (a.Count == 0) { count1 = 0; break; } } } int count2 = 0; int tempCount = 0; for (int i = 0; i < tempGroupId.Count; i++) { var tempUserIdList1 = tempGroupId[i]; if (tempUserIdList1.Count == 0) { break; } var passData = doorLock.FreezeAccountData(tempUserIdList1, accessType); var resultData = await doorLock.DefaultControlAsync(passData); if (resultData != null && resultData.defaultControlResponseData != null) { if (resultData.defaultControlResponseData.status == 32) { count2++; } else if (resultData.defaultControlResponseData.status == 33) { count2++; } System.Threading.Thread.Sleep(1000); } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(Common.CommonPage.Instance); }); return; } tempCount++; } // 批量冻结门锁中的账户后,准备冻结云端账户 if (count2 == count1) { foreach (var curDoorLockUser in curAccountDoorLockUserList) { if (isFreeze) { var refreshDoorLockData = new ZigBee.Device.DoorLock.RefreshDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { refreshDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); refreshDoorLockData.IsOtherAccountCtrl = true; } if (doorLock.DeviceAddr != null) { refreshDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } refreshDoorLockData.OpenLockMode = curDoorLockUser.OpenLockMode; refreshDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId; refreshDoorLockData.PrimaryId = curDoorLockUser.Id; refreshDoorLockData.IsFreezeUser = true; refreshDoorLockData.IsTempUnlockAuthority = doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark]; //冻结云端 var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/UpdateDoorLock", refreshDoorLockData); if (result != null) { if (result.StateCode == "Success") { successConunt++; } else { Application.RunOnMainThread(() => { if (isFreeze) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.FreezeFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } else { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.UnFreezeFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } return; }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(Common.CommonPage.Instance); }); } } else { var refreshDoorLockData = new ZigBee.Device.DoorLock.RefreshDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { refreshDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); refreshDoorLockData.IsOtherAccountCtrl = true; } if (doorLock.DeviceAddr != null) { refreshDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } refreshDoorLockData.OpenLockMode = curDoorLockUser.OpenLockMode; refreshDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId; refreshDoorLockData.PrimaryId = curDoorLockUser.Id; refreshDoorLockData.IsFreezeUser = false; refreshDoorLockData.IsTempUnlockAuthority = doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark]; //解冻云端 var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/UpdateDoorLock", refreshDoorLockData); if (result != null) { if (result.StateCode == "Success") { successConunt++; } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.FreezeFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(Common.CommonPage.Instance); }); } } } } else { Application.RunOnMainThread(() => { if (isFreeze) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.FreezeFailed) + ".", Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(Common.CommonPage.Instance); } else { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.UnFreezeFailed) + ".", Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(Common.CommonPage.Instance); } }); } } else { //添加云端存储信息 //冻结/解冻云端 var addLockInfo = new ZigBee.Device.DoorLock.AddDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { addLockInfo.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); addLockInfo.IsOtherAccountCtrl = true; } addLockInfo.CloudAccountId = curAccountObj.SubAccountDistributedMark; if (doorLock.DeviceAddr != null) { addLockInfo.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } addLockInfo.EntryTime = System.DateTime.Now; if (isFreeze) { addLockInfo.IsFreezeUser = true; } else { addLockInfo.IsFreezeUser = false; } addLockInfo.IsTempUnlockAuthority = doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark]; var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/AddDoorLock", addLockInfo); if (result != null) { if (result.StateCode == "Success") { operateConunt = 0; } else { Application.RunOnMainThread(() => { if (isFreeze) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.FreezeFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } else { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.UnFreezeFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } return; }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } } catch { } finally { if (operateConunt == successConunt) { if (isFreeze) { doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark] = true; } else { doorLock.IsFreezeAccount[curAccountObj.SubAccountDistributedMark] = false; } doorLock.ReSave(); } Application.RunOnMainThread(() => { MidRefresh(); CommonPage.Loading.Hide(); }); } }); }; } /// /// 是否给子账户拥有远程开锁的条件 /// /// void HasRemoteUnlockAccessMethod(bool hasAccess) { string msg = Language.StringByID(R.MyInternationalizationString.SureGiveAccessToSubaccount); if (!hasAccess) { msg = Language.StringByID(R.MyInternationalizationString.SureCancelAccessToSubaccount); } var alert = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm)); alert.Show(); //使用确认型弹框时,的回调函数 alert.ConfirmClickEvent += () => { System.Threading.Tasks.Task.Run(async () => { int successConunt = 0; int operateConunt = -1; Application.RunOnMainThread(() => { CommonPage.Loading.Start("Loading..."); }); try { var resultList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetAccountDoorLockUserList(doorLock, curAccountObj.SubAccountDistributedMark); var uList = new List { }; if (resultList != null) { foreach (var a in resultList) { uList.Add(a.CloudAccountId); } } var d = uList.Find((value) => { return value == curAccountObj.SubAccountDistributedMark; }); if (d != null) { //修改云端存储信息 var curAccountDoorLockUserList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetAccountDoorLockUserList(doorLock, curAccountObj.SubAccountDistributedMark); foreach (var curDoorLockUser in curAccountDoorLockUserList) { operateConunt = curAccountDoorLockUserList.Count; if (hasAccess) { var refreshDoorLockData = new ZigBee.Device.DoorLock.RefreshDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { refreshDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); refreshDoorLockData.IsOtherAccountCtrl = true; } if (doorLock.DeviceAddr != null) { refreshDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } refreshDoorLockData.PrimaryId = curDoorLockUser.Id; refreshDoorLockData.IsFreezeUser = false; refreshDoorLockData.IsTempUnlockAuthority = true; // 授权 var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/UpdateDoorLock", refreshDoorLockData); if (result != null) { if (result.StateCode == "Success") { successConunt++; } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GiveAccessToSubaccountFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } else { var refreshDoorLockData = new ZigBee.Device.DoorLock.RefreshDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { refreshDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); refreshDoorLockData.IsOtherAccountCtrl = true; } if (doorLock.DeviceAddr != null) { refreshDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } refreshDoorLockData.PrimaryId = curDoorLockUser.Id; refreshDoorLockData.IsFreezeUser = false; refreshDoorLockData.IsTempUnlockAuthority = false; //取消权限 var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/UpdateDoorLock", refreshDoorLockData); if (result != null) { if (result.StateCode == "Success") { successConunt++; } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CancelAccessToSubaccountFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } } } else { //新增,且不冻结 var addLockInfo = new ZigBee.Device.DoorLock.AddDoorLockData(); if (UserCenterResourse.UserInfo.AuthorityNo != 1) { addLockInfo.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); addLockInfo.IsOtherAccountCtrl = true; } addLockInfo.CloudAccountId = curAccountObj.SubAccountDistributedMark; if (doorLock.DeviceAddr != null) { addLockInfo.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint; } addLockInfo.EntryTime = System.DateTime.Now; addLockInfo.IsFreezeUser = false; if (hasAccess) { addLockInfo.IsTempUnlockAuthority = true; } else { addLockInfo.IsTempUnlockAuthority = false; } var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/AddDoorLock", addLockInfo); if (result != null) { if (result.StateCode == "Success") { operateConunt = 0; } else { Application.RunOnMainThread(() => { if (hasAccess) { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GiveAccessToSubaccountFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } else { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CancelAccessToSubaccountFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); } return; }); } } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } } } catch { } finally { if (operateConunt == successConunt) { if (hasAccess) { doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark] = true; } else { doorLock.HasRemoteUnlockAccess[curAccountObj.SubAccountDistributedMark] = false; } doorLock.ReSave(); } Application.RunOnMainThread(() => { MidRefresh(); CommonPage.Loading.Hide(); }); } }); }; } } }