黄学彪
2020-04-15 23532fa8ad34c89b6d24b01eaef6475fd0aad898
ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
@@ -335,9 +335,33 @@
            this.listView.AddChidrenFrame2(frameTable);
            //图标
            var btnIcon = frameTable.AddLeftIcon();
            //信息
            var btnMsg = frameTable.AddTopView("", 600);
            //人物
            string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
            frameTable.AddBottomView(perName, 600);
            //时间
            if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
            {
                //如果日期范围一样,则不显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("HH:mm:ss"), 400);
            }
            else
            {
                //如果日期范围不一样,则显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("yyyy/MM/dd HH:mm:ss"), 700);
            }
            //底线
            if (addLine == true)
            {
                frameTable.AddBottomLine();
            }
            //其他消息
            if (historyInfo.OpenLockMode == -1)
            {
                //其他消息
                //图片
                var device = Common.LocalDevice.Current.GetDevice(historyInfo.DeviceMac, historyInfo.DeviceEpoint);
                if (device == null)
                {
@@ -347,29 +371,42 @@
                {
                    Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device);
                }
            }
            else if (historyInfo.OpenLockMode == 9000)
            {
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
            }
            else if (historyInfo.UnlockIsSuccess == true)
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
            }
            else
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
            }
            //信息
            var btnMsg = frameTable.AddTopView("", 600);
            if (historyInfo.OpenLockMode == -1 || historyInfo.OpenLockMode == 9000)
            {
                //其他消息
                //消息
                btnMsg.Text = historyInfo.AlarmMsg;
            }
            //门锁常开模式
            else if (historyInfo.OpenLockMode == 9000)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
                //消息
                if (historyInfo.OtherOpenLockMode == 9001)
                {
                    //常开模式手动开启
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualOpen;
                }
                else if (historyInfo.OtherOpenLockMode == 9002)
                {
                    //常开模式手动取消
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualClose;
                }
                else if (historyInfo.OtherOpenLockMode == 9003)
                {
                    //常开模式启用{0}小时
                    btnMsg.Text = Language.StringByID(R.MyInternationalizationString.uNormallyOpenModeOpenSomeTime).Replace("{0}", historyInfo.NormallyOpenContinuedTime);
                }
                else
                {
                    //上面是App手动推送,这里是网关或者门锁自己推送
                    btnMsg.Text = historyInfo.AlarmMsg;
                }
            }
            //开锁成功
            else if (historyInfo.UnlockIsSuccess == true)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁成功
@@ -386,8 +423,12 @@
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintSuccess;
                }
            }
            //开锁失败
            else
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁失败
@@ -403,28 +444,6 @@
                    //指纹开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintFail;
                }
            }
            //人物
            string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
            frameTable.AddBottomView(perName, 600);
            //时间
            if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
            {
                //如果日期范围一样,则不显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("HH:mm:ss"), 400);
            }
            else
            {
                //如果日期范围不一样,则显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("yyyy/MM/dd HH:mm:ss"), 700);
            }
            if (addLine == true)
            {
                //底线
                frameTable.AddBottomLine();
            }
        }
@@ -454,6 +473,110 @@
                //初始化记录列表
                this.InitLogListInfo(false);
            };
        }
        #endregion
        #region ■ 筛选记录___________________________
        /// <summary>
        /// 筛选历史记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> ScreeningHistoryData(Dictionary<string, string> dicMemberName)
        {
            //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了
            var listScreeningData = new List<HistoryInfo>();
            //清除掉之前的记录
            this.listOtherUserId = new List<string>();
            this.listOtherMsgId = new List<string>();
            //是否选择全选用户
            bool selectAllUser = this.listSearchUserId.Contains("-1");
            //是否单选了其他
            bool selectOtherUser = this.listSearchUserId.Contains("-9999");
            //是否选择全选开锁方式
            bool selectAllLockMode = this.listSearchLockId.Contains(-1);
            //一个个去遍历
            foreach (var data in this.listHistoryInfo)
            {
                //检测该历史记录能否显示
                bool result = this.CheckHistoryDataCanShow(data, dicMemberName, selectAllUser, selectOtherUser, selectAllLockMode);
                if (result == true)
                {
                    listScreeningData.Add(data);
                }
            }
            return listScreeningData;
        }
        /// <summary>
        /// 检测该历史记录能否显示
        /// </summary>
        /// <param name="info">检测对象</param>
        /// <param name="dicMemberName">成员信息</param>
        /// <param name="selectAllUser">是否选择全选用户</param>
        /// <param name="selectOtherUser">是否单选了其他</param>
        /// <param name="slectAllLockMode">是否选择全选开锁方式</param>
        private bool CheckHistoryDataCanShow(HistoryInfo info, Dictionary<string, string> dicMemberName,
            bool selectAllUser, bool selectOtherUser, bool slectAllLockMode)
        {
            //如果没有选择  全选用户
            if (selectAllUser == false)
            {
                //如果这个用户ID不包含在指定选择的成员列表里面
                if (this.listSearchUserId.Contains(info.CloudAccountId) == false)
                {
                    if (dicMemberName.ContainsKey(info.CloudAccountId) == true)
                    {
                        //如果能够识别这个id的话,则表示它不属于其他类,并且也不再选择目标内
                        return false;
                    }
                    //如果没有选择 其他的话,不显示
                    if (selectOtherUser == false)
                    {
                        return false;
                    }
                }
            }
            //如果是成员身份,并且用户ID不为空
            if (UserCenterResourse.UserInfo.AuthorityNo == 3 && info.CloudAccountId != string.Empty)
            {
                //成员不能看到 其他人的记录(成员的时候,这个变量里面只有他自己一个)
                if (dicMemberName.ContainsKey(info.CloudAccountId) == false)
                {
                    return false;
                }
            }
            //如果没有选择  全选开锁方式
            if (slectAllLockMode == false)
            {
                //如果这个开锁方式不在选择的列表里面的话
                if (this.listSearchLockId.Contains(info.OpenLockMode) == false)
                {
                    return false;
                }
            }
            //另一张表的数据主键
            if (info.OpenLockMode == -1 || info.OpenLockMode == 9000)
            {
                if (info.MsgKeyId != string.Empty)
                {
                    //其他消息的主键,它存在另外的一张数据库表中
                    this.listOtherMsgId.Add(info.MsgKeyId);
                }
            }
            if (info.CloudAccountId != string.Empty && dicMemberName.ContainsKey(info.CloudAccountId) == false
                && this.listOtherUserId.Contains(info.CloudAccountId) == false)
            {
                //无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
                this.listOtherUserId.Add(info.CloudAccountId);
            }
            return true;
        }
        #endregion
@@ -591,110 +714,6 @@
            }
            return listLog;
        }
        #endregion
        #region ■ 筛选记录___________________________
        /// <summary>
        /// 筛选历史记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> ScreeningHistoryData(Dictionary<string, string> dicMemberName)
        {
            //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了
            var listScreeningData = new List<HistoryInfo>();
            //清除掉之前的记录
            this.listOtherUserId = new List<string>();
            this.listOtherMsgId = new List<string>();
            //是否选择全选用户
            bool selectAllUser = this.listSearchUserId.Contains("-1");
            //是否单选了其他
            bool selectOtherUser = this.listSearchUserId.Contains("-9999");
            //是否选择全选开锁方式
            bool selectAllLockMode = this.listSearchLockId.Contains(-1);
            //一个个去遍历
            foreach (var data in this.listHistoryInfo)
            {
                //检测该历史记录能否显示
                bool result = this.CheckHistoryDataCanShow(data, dicMemberName, selectAllUser, selectOtherUser, selectAllLockMode);
                if (result == true)
                {
                    listScreeningData.Add(data);
                }
            }
            return listScreeningData;
        }
        /// <summary>
        /// 检测该历史记录能否显示
        /// </summary>
        /// <param name="info">检测对象</param>
        /// <param name="dicMemberName">成员信息</param>
        /// <param name="selectAllUser">是否选择全选用户</param>
        /// <param name="selectOtherUser">是否单选了其他</param>
        /// <param name="slectAllLockMode">是否选择全选开锁方式</param>
        private bool CheckHistoryDataCanShow(HistoryInfo info, Dictionary<string, string> dicMemberName,
            bool selectAllUser, bool selectOtherUser, bool slectAllLockMode)
        {
            //如果没有选择  全选用户
            if (selectAllUser == false)
            {
                //如果这个用户ID不包含在指定选择的成员列表里面
                if (this.listSearchUserId.Contains(info.CloudAccountId) == false)
                {
                    if (dicMemberName.ContainsKey(info.CloudAccountId) == true)
                    {
                        //如果能够识别这个id的话,则表示它不属于其他类,并且也不再选择目标内
                        return false;
                    }
                    //如果没有选择 其他的话,不显示
                    if (selectOtherUser == false)
                    {
                        return false;
                    }
                }
            }
            //如果是成员身份,并且用户ID不为空
            if (UserCenterResourse.UserInfo.AuthorityNo == 3 && info.CloudAccountId != string.Empty)
            {
                //成员不能看到 其他人的记录(成员的时候,这个变量里面只有他自己一个)
                if (dicMemberName.ContainsKey(info.CloudAccountId) == false)
                {
                    return false;
                }
            }
            //如果没有选择  全选开锁方式
            if (slectAllLockMode == false)
            {
                //如果这个开锁方式不在选择的列表里面的话
                if (this.listSearchLockId.Contains(info.OpenLockMode) == false)
                {
                    return false;
                }
            }
            //另一张表的数据主键
            if (info.OpenLockMode == -1 || info.OpenLockMode == 9000)
            {
                if (info.MsgKeyId != string.Empty)
                {
                    //其他消息的主键,它存在另外的一张数据库表中
                    this.listOtherMsgId.Add(info.MsgKeyId);
                }
            }
            if (info.CloudAccountId != string.Empty && dicMemberName.ContainsKey(info.CloudAccountId) == false
                && this.listOtherUserId.Contains(info.CloudAccountId) == false)
            {
                //无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
                this.listOtherUserId.Add(info.CloudAccountId);
            }
            return true;
        }
        #endregion
@@ -942,6 +961,14 @@
            /// </summary>
            public string CloudAccountId = string.Empty;
            /// <summary>
            /// 其他开锁方式(OpenLockMode=9000时有效) 9001:常开打开 9002:常开取消 9003:常开持续
            /// </summary>
            public int OtherOpenLockMode = -1;
            /// <summary>
            /// 常开持续时间(1~72小时 OtherOpenLockMode=9003的时候有效)
            /// </summary>
            public string NormallyOpenContinuedTime = string.Empty;
            /// <summary>
            /// 当开锁方式为-1时使用,它属于其他类
            /// </summary>
            public string AlarmMsg = string.Empty;