黄学彪
2019-11-07 82a773d1783549caca563831aac8affc059deedf
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs
@@ -24,6 +24,29 @@
        public static int InValidDateSecond = 0;
        #endregion
        public static async System.Threading.Tasks.Task<List<Shared.Phone.UserCenter.MemberInfoRes>> LocalAccountList()
        {
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                List<Shared.Phone.UserCenter.MemberInfoRes> localAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
                List<Shared.Phone.UserCenter.MemberInfoRes> SubAccounList = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
                if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2)
                {
                    SubAccounList = await ZigBee.Device.DoorLock.GetSubAccountByDistributedMark();
                }
                // 注意:SubAccountDistributedMark这个值很有用,“添加门锁”到云端信息中,CloudAccountId如果是子账户,则是SubAccountDistributedMark这个值很有用,如果是管理员或者主人则是登录到G
                var masterAccount = new Shared.Phone.UserCenter.MemberInfoRes();
                masterAccount.Account = Shared.Common.Config.Instance.Account;
                masterAccount.AccountType = Shared.Common.Config.Instance.AccountType;
                masterAccount.SubAccountDistributedMark = Shared.Common.Config.Instance.Guid;
                masterAccount.UserName = UserCenterResourse.UserInfo.UserName;
                localAccountList.Add(masterAccount);
                localAccountList.AddRange(SubAccounList);
                return localAccountList;
            });
        }
        /// <summary>
        ///  获取门锁包含设备信息和账户信息
        /// </summary>
@@ -34,6 +57,14 @@
                 //  读取设备中的信息
                 doorLock.localDoorLockUserList.Clear();
                 var getDoorLockInfo = await doorLock.GetDoorlockUserInfoAsync();
                 if (getDoorLockInfo == null)
                 {
                     doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = true;
                 }
                 else
                 {
                     doorLock.IsFailedToGetDoorLockInfo[curAccountObj.SubAccountDistributedMark] = false;
                 }
                 if (getDoorLockInfo != null && getDoorLockInfo.doorLockUserDetailData != null)
                 {
                     var dataList = getDoorLockInfo.doorLockUserDetailData.UserObjList;
@@ -53,24 +84,15 @@
                 //  读取云端门锁设备中的信息
                 var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { };
                 if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                 {
                     localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                     localDoorLockObj.IsOtherAccountCtrl = true;
                 }
                 localDoorLockObj.CloudAccountId = curAccountObj.SubAccountDistributedMark;
                 {
                     localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                 }
                 var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj);
                 var getDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, curAccountObj.SubAccountDistributedMark);
                 if (getDoorLockInfoList != null)
                 {
                     foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                     {
                         if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                         {
                             continue;
                         }
                         if (doorLock.localDoorLockUserList.ContainsKey(int.Parse(curDoorLockUser.DoorLockLocalUserId)))
                         {
                             var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { };
@@ -82,28 +104,215 @@
                             doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId;
                             doorLock.localDoorLockUserList[int.Parse(curDoorLockUser.DoorLockLocalUserId)] = doorLockObj;
                         }
                         else
                         {
                             //门锁中不存在用户ID,云端存在,需要在这里删除云端存在的数据
                             var deleteDoorLockData = new ZigBee.Device.DoorLock.DeleteDoorLockData();
                             if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                             {
                                 deleteDoorLockData.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                                 deleteDoorLockData.IsOtherAccountCtrl = true;
                             }
                             if (doorLock.DeviceAddr != null)
                             {
                                 deleteDoorLockData.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                             }
                             deleteDoorLockData.DoorLockLocalUserId = curDoorLockUser.DoorLockLocalUserId;
                             deleteDoorLockData.PrimaryId = curDoorLockUser.Id;
                             deleteDoorLockData.DelDoorLockDelType = 2;
                             var result = await ZigBee.Device.DoorLock.SendDoorLockToServer("DoorLock/DelDoorLock", deleteDoorLockData);
                         }
                     }
                     //获取云端存储的门锁成员信息
                     //foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                     //{
                     //    var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj();
                     //    if (curDoorLockUser.DoorLockLocalUserId != null)
                     //    {
                     //        doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId);
                     //        doorLockObj.UnlockType = curDoorLockUser.OpenLockMode;
                     //        doorLockObj.UserName = curDoorLockUser.UserIdRemarks;
                     //    }
                     //    doorLockObj.PrimaryId = curDoorLockUser.Id;
                     //    doorLockObj.EntryTime = curDoorLockUser.EntryTime;
                     //    doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId;
                     //    if (doorLock.localDoorLockAccountList.ContainsKey(curDoorLockUser.CloudAccountId) == false)
                     //    {
                     //        doorLock.localDoorLockAccountList.Add(doorLockObj.ConnectedAccount, doorLockObj);
                     //    }
                     //    else
                     //    {
                     //        doorLock.localDoorLockAccountList[doorLockObj.ConnectedAccount] = doorLockObj;
                     //    }
                     //}
                     doorLock.ReSave();
                 }
                 return doorLock.localDoorLockUserList;
             }));
        }
        /// <summary>
        ///  获取云端存储的门锁信息
        /// </summary>
        public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetCloudLocalDoorLocklist(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark)
        {
            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () =>
            {
                //  读取云端门锁设备中的信息
                var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { };
                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                {
                    localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                    localDoorLockObj.IsOtherAccountCtrl = true;
                }
                localDoorLockObj.CloudAccountId = subAccountDistributedMark;
                if (doorLock.DeviceAddr != null)
                {
                    localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                }
                var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj);
                if (getDoorLockInfoList != null)
                {
                    foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                    {
                        if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                        {
                            continue;
                        }
                        if (doorLock.localDoorLockUserList.ContainsKey(int.Parse(curDoorLockUser.DoorLockLocalUserId)))
                        {
                            var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { };
                            doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId);
                            doorLockObj.UnlockType = curDoorLockUser.OpenLockMode;
                            doorLockObj.PrimaryId = curDoorLockUser.Id;
                            doorLockObj.EntryTime = curDoorLockUser.EntryTime;
                            doorLockObj.UserName = curDoorLockUser.UserIdRemarks;
                            doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId;
                            doorLock.localDoorLockUserList[int.Parse(curDoorLockUser.DoorLockLocalUserId)] = doorLockObj;
                        }
                    }
                    doorLock.ReSave();
                }
                return doorLock.localDoorLockUserList;
            }));
        }
        /// <summary>
        ///  获取云端存储的成员信息
        /// </summary>
        public static async System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.CloudDoorLockObj>> GetAccountDoorLockUserList(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark)
        {
            List<ZigBee.Device.DoorLock.CloudDoorLockObj> curAccountDoorLockUserList = new List<ZigBee.Device.DoorLock.CloudDoorLockObj> { };
            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<List<ZigBee.Device.DoorLock.CloudDoorLockObj>>>)(async () =>
            {
                //  读取云端门锁设备中的信息
                var getDoorLockInfoList = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllInfolist(doorLock, subAccountDistributedMark);
                if (getDoorLockInfoList != null)
                {
                    //获取云端存储的门锁成员信息
                    foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                    {
                        if (curDoorLockUser.CloudAccountId == "" || curDoorLockUser.CloudAccountId != subAccountDistributedMark)
                        {
                            continue;
                        }
                        else
                        {
                            curAccountDoorLockUserList.Add(curDoorLockUser);
                        }
                    }
                }
                return curAccountDoorLockUserList;
            }));
        }
        /// <summary>
        ///  获取当前账户门锁的所有信息
        /// </summary>
        public static async System.Threading.Tasks.Task<ZigBee.Device.DoorLock.GetDoorLockDataRes> GetDoorLockAllInfolist(ZigBee.Device.DoorLock doorLock, string subAccountDistributedMark)
        {
            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<ZigBee.Device.DoorLock.GetDoorLockDataRes>>)(async () =>
           {
               //  读取云端门锁设备中的信息
               var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { };
               if (UserCenterResourse.UserInfo.AuthorityNo != 1)
               {
                   localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                   localDoorLockObj.IsOtherAccountCtrl = true;
               }
               localDoorLockObj.CloudAccountId = subAccountDistributedMark;
               if (doorLock.DeviceAddr != null)
               {
                   localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
               }
               var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj);
               return getDoorLockInfoList;
           }));
        }
        /// <summary>
        ///  获取云端存储的门锁成员信息
        /// </summary>
        public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetLocaDoorLockAccountlist(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes curAccountObj)
        {
            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () =>
            {
                //  读取云端门锁设备中的信息
                var localDoorLockObj = new ZigBee.Device.DoorLock.GetDoorLockData() { };
                if (UserCenterResourse.UserInfo.AuthorityNo != 1)
                {
                    localDoorLockObj.LoginAccessToken = UserCenterLogic.GetConnectMainToken();
                    localDoorLockObj.IsOtherAccountCtrl = true;
                }
                localDoorLockObj.CloudAccountId = curAccountObj.SubAccountDistributedMark;
                {
                    localDoorLockObj.DoorLockId = doorLock.DeviceAddr + "_" + doorLock.DeviceEpoint;
                }
                var getDoorLockInfoList = await ZigBee.Device.DoorLock.GetDoorLockInfoFromServer("DoorLock/GetDoorLockPager", localDoorLockObj);
                if (getDoorLockInfoList != null)
                {
                    foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                    {
                        var doorLockObj = new ZigBee.Device.DoorLock.LocaDoorLockObj() { };
                        if (curDoorLockUser.DoorLockLocalUserId != null)
                        {
                            doorLockObj.UserID = int.Parse(curDoorLockUser.DoorLockLocalUserId);
                            doorLockObj.UnlockType = curDoorLockUser.OpenLockMode;
                            doorLockObj.UserName = curDoorLockUser.UserIdRemarks;
                        }
                        doorLockObj.PrimaryId = curDoorLockUser.Id;
                        doorLockObj.EntryTime = curDoorLockUser.EntryTime;
                        doorLockObj.ConnectedAccount = curDoorLockUser.CloudAccountId;
                        if (doorLock.localDoorLockAccountList.ContainsKey(curDoorLockUser.CloudAccountId) == false)
                        {
                            doorLock.localDoorLockAccountList.Add(doorLockObj.ConnectedAccount, doorLockObj);
                        }
                        else
                        {
                            doorLock.localDoorLockAccountList[curDoorLockUser.DoorLockLocalUserId] = doorLockObj;
                        }
                    }
                }
                return doorLock.localDoorLockUserList;
            }));
        }
        /// <summary>
        ///  获取本地匹配成员的门锁用户信息列表
        /// </summary>
        public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetMatchDoorlockAccountList(ZigBee.Device.DoorLock doorLock, Shared.Phone.UserCenter.MemberInfoRes curAccountObj)
        {
            return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>>>)(async () =>
            {
                var curAccountDoorLockUserList = new Dictionary<int, ZigBee.Device.DoorLock.LocaDoorLockObj>();
                foreach (var curUserId in doorLock.localDoorLockAccountList.Keys)
                {
                    var curDoorLockUser = doorLock.localDoorLockAccountList[curUserId];
                    if (curDoorLockUser.ConnectedAccount == "" || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark)
                    {
                        continue;
                    }
                    else
                    {
                        curAccountDoorLockUserList.Add(curDoorLockUser.UserID, curDoorLockUser);
                    }
                }
                return curAccountDoorLockUserList;
            }));
        }
        /// <summary>
@@ -156,7 +365,7 @@
            /// <para>管理员10个,0~9,</para>             ///<para>普通用户220个,10~234</para>             ///<para>一次性用户10个,235~245</para>             ///<para>临时密码密码10个,245~255,</para>             ///<para>其中指纹100,密码100,卡56</para>
            ///<para>门锁本地录入的密码、指纹、感应卡都有唯一对应的用户Id</para>
            /// </summary>
            public int UserID;
            public int UserID = -1;
            /// <summary>
            /// 开锁类型
            /// <para>常用:</para>