HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-10-28 8b4d79ca03495e522a1953e04ca17527f33c853a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using ZigBee.Device;
 
namespace Shared.Phone.UserCenter.DoorLock
{
    public class DoorLockCommonInfo : CommonDevice
    {
        #region  本地变量
        public static bool IsModify = false;
        public static bool InTempPasswordVisiable = false;
        public static int ValidDateYear = 0;
        public static int ValidDateMonth = 0;
        public static int ValidDateDay = 0;
        public static int ValidDateHour = 100;
        public static int ValidDateMinute = 100;
        public static int ValidDateSecond = 0;
        public static int InValidDateYear = 0;
        public static int InValidDateMonth = 0;
        public static int InValidDateDay = 0;
        public static int InValidDateHour = 100;
        public static int InValidDateMinute = 100;
        public static int InValidDateSecond = 0;
        #endregion
 
        /// <summary>
        ///  获取门锁包含设备信息和账户信息
        /// </summary>
        public static async System.Threading.Tasks.Task<Dictionary<int, LocaDoorLockObj>> GetLocaDoorLocklist(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 () =>
             {
                 //  读取设备中的信息
                 doorLock.localDoorLockUserList.Clear();
                 var getDoorLockInfo = await doorLock.GetDoorlockUserInfoAsync();
                 if (getDoorLockInfo != null && getDoorLockInfo.doorLockUserDetailData != null)
                 {
                     var dataList = getDoorLockInfo.doorLockUserDetailData.UserObjList;
                     foreach (var doorData in dataList)
                     {
                         var localDoorLockObj1 = new ZigBee.Device.DoorLock.LocaDoorLockObj()
                         {
                             UserID = doorData.UserId,
                             UnlockType = doorData.UserType
                         };
                         if ((doorLock.localDoorLockUserList.ContainsKey(localDoorLockObj1.UserID)) == false)
                         {
                             doorLock.localDoorLockUserList.Add(localDoorLockObj1.UserID, localDoorLockObj1);
                         }
                     }
                 }
 
                 //  读取云端门锁设备中的信息
                 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)
                     {
                         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;
                         }
                         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);
                         }
                     }
                 }
                 return doorLock.localDoorLockUserList;
             }));
        }
 
        /// <summary>
        /// 生成6位临时密码
        /// </summary>
        /// <returns></returns>
        public static string GetTempPassword()
        {
            string password = "";
            password = new Random().Next(100000, 999999).ToString();
            return password;
        }
 
        /// <summary>
        /// 将UNIX时间戳转换成系统时间(精确到秒)
        /// <returns></returns>
        public static DateTime GetLocalTime(int unixTimeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(unixTimeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime dtResult = dtStart.Add(toNow);
            return dtResult;
        }
 
        /// <summary>
        /// 将系统时间转换成UNIX时间戳(精确到秒)
        /// </summary>
        /// <param name="dateTime">北京时间</param>
        /// <param name="accurateToMilliseconds">精确到毫秒,否到秒</param>
        /// <returns>返回一个长整数时间戳</returns>
        public static string GetUnixTimeStamp(DateTime dateTime)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            //DateTime dtNow = DateTime.Parse(DateTime.Now.ToString());
            TimeSpan toNow = dateTime.Subtract(dtStart);
            string timeStamp = toNow.Ticks.ToString();
            timeStamp = timeStamp.Substring(0, timeStamp.Length - 7);
            return timeStamp;
        }
 
        /// <summary>
        /// 门锁编程事件通知
        /// </summary>
        [System.Serializable]
        public class LocaDoorLockObj
        {
            /// <summary>
            /// 用户id
            /// <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;
            /// <summary>
            /// 开锁类型
            /// <para>常用:</para>
            /// <para>0:Keypad(键盘/密码);3:RFID(射频卡);15:指纹</para>
            /// <para>不常用:
            /// <para>1:RF(Zigbee无线);2:Manual(手动);255:Indeterminate(不确定)</para>
            /// </summary>
            public int UnlockType;
            /// <summary>
            ///  关联账户的ID
            /// </summary>
            public string ConnectedAccount = string.Empty;
            /// <summary>
            ///  门锁用户名
            /// </summary>
            public string UserName = string.Empty;
            /// <summary>
            /// 门锁录入的时
            /// </summary>
            public DateTime EntryTime = System.DateTime.MinValue;
            /// <summary>
            /// PrimaryId 门锁云端主 键(非更新字段,以下均为更新字段) -->键名 : PrimaryId默认值: null
            /// </summary>
            public string PrimaryId = "";
        }
    }
}