黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/Common/Logic/HdlDeviceDoorLockLogic.cs
New file
@@ -0,0 +1,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/app/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/app/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/app/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
    }
}