黄学彪
2020-12-16 0d9f64668fd7350d6a21fd157e32009a96d98134
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
using System;
using System.Collections.Generic;
using System.Text;
 
namespace Shared.Phone
{
    /// <summary>
    /// 门锁历史记录的逻辑
    /// </summary>
    public class HdlDeviceDoorLockLogic
    {
        #region ■ 变量声明___________________________
 
        /// <summary>
        /// 门锁历史记录的逻辑
        /// </summary>
        private static HdlDeviceDoorLockLogic m_Current = null;
        /// <summary>
        /// 门锁历史记录的逻辑
        /// </summary>
        public static HdlDeviceDoorLockLogic Current
        {
            get
            {
                if (m_Current == null)
                {
                    m_Current = new HdlDeviceDoorLockLogic();
                }
                return m_Current;
            }
        }
 
        #endregion
 
        #region ■ 添加历史记录_______________________
 
        /// <summary>
        /// 添加历史记录
        /// </summary>
        /// <param name="i_doorLock">门锁对象</param>
        /// <param name="OtherOpenLockMode">其他开锁方式 9001:常开打开 9002:常开取消 9003:常开持续 9004:常开自动化手动取消</param>
        /// <param name="NormallyOpenContinuedTime">常开持续时间(1~72小时 OtherOpenLockMode=9003的时候有效)</param>
        public void AddDoorHistoryLog(ZigBee.Device.DoorLock i_doorLock, int OtherOpenLockMode, string NormallyOpenContinuedTime)
        {
            HdlThreadLogic.Current.RunThread(() =>
            {
                var pra = new
                {
                    doorLockId = i_doorLock.DeviceAddr + "_" + i_doorLock.DeviceEpoint,
                    unlockMode = OtherOpenLockMode,
                    homeId = Common.Config.Instance.Home.Id,
                    isUnlockSuccess = true,
                    normallyOpenContinuedTime = NormallyOpenContinuedTime,
                    unlockTime = DateTime.UtcNow.ToString()
                };
                //不管返回值
                var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/doorLockUnlockHistory/save", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限);
            });
        }
 
        #endregion
 
        #region ■ 获取历史记录_______________________
 
        /// <summary>
        /// 获取门锁的历史记录(不会返回null)
        /// </summary>
        /// <param name="i_doorKey">门锁的Mac + "_" + 端点</param>
        /// <param name="i_dateTimeFrom">搜索时间From(不是utc时间)</param>
        /// <param name="i_dateTimeTo">搜索时间To(不是utc时间)</param>
        /// <returns></returns>
        public List<DoorHistoryLogInfo> GetDoorHistoryLogInfo(string i_doorKey, DateTime i_dateTimeFrom, DateTime i_dateTimeTo)
        {
            var pra = new
            {
                doorLockId = i_doorKey,
                homeId = Common.Config.Instance.Home.Id,
                unlockBeginTime = i_dateTimeFrom.ToUniversalTime().ToString(),
                unlockEndTime = i_dateTimeTo.ToUniversalTime().ToString()
            };
            var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/doorLockUnlockHistory/list", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限, false, 5);
            if (result == null || result.Code != HttpMessageEnum.A成功)
            {
                return new List<DoorHistoryLogInfo>();
            }
            var listData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DoorHistoryLogInfo>>(result.Data.ToString());
            var listLog = new List<DoorHistoryLogInfo>();
 
            foreach (var data in listData)
            {
                //不知道为什么会有上报了虚拟9000的那个特殊的东西(这是以前的注释,先放这里)
                if (data.UserId == null)
                {
                    data.UserId = string.Empty;
                }
                listLog.Add(data);
            }
            return listLog;
        }
 
        #endregion
 
        #region ■ 清空历史记录_______________________
 
        /// <summary>
        /// 清空历史记录
        /// </summary>
        /// <param name="i_doorId">门锁的Mac + "_" + 端点</param>
        /// <param name="i_dateTimeFrom">时间From(不是utc时间)</param>
        /// <param name="i_dateTimeTo">时间To(不是utc时间)</param>
        /// <param name="i_listOtherId">存在另一张表的消息记录的主键</param>
        /// <returns></returns>
        public bool ClearAllDoorHistoryLog(string i_doorId, DateTime i_dateTimeFrom, DateTime i_dateTimeTo, List<string> i_listOtherId)
        {
            var pra1 = new
            {
                doorLockId = i_doorId,
                homeId = Common.Config.Instance.Home.Id,
                unlockBeginTime = i_dateTimeFrom.ToUniversalTime().ToString(),
                unlockEndTime = i_dateTimeTo.ToUniversalTime().ToString()
            };
            //清空记录
            var result1 = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("home-wisdom/doorLockUnlockHistory/clear", RestSharp.Method.POST, pra1, null, null, CheckMode.A账号权限);
            if (result1 == null || result1.Code != HttpMessageEnum.A成功)
            {
                return false;
            }
            //清空另外一张表的记录
            foreach (var msgId in i_listOtherId)
            {
                var result2 = HdlMessageLogic.Current.DeleteCloundMessage(msgId);
                if (result2 == false)
                {
                    return false;
                }
            }
            return true;
        }
 
        #endregion
    }
}