/// <summary>
        /// 通过id删除历史报警列表记录数据
        /// </summary>
        public ReturnItem <RetHistoryAlertPolicies> DelHistoryAlertPoliciesData(HistoryAlertPoliciesModel parameter)
        {
            ReturnItem <RetHistoryAlertPolicies> r = new ReturnItem <RetHistoryAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    A_AlarmHistory delalert = alert.Set <A_AlarmHistory>().Where(a => a.ID == parameter.ID).FirstOrDefault();
                    if (delalert != null)
                    {
                        var entry = alert.Entry(delalert);
                        //设置该对象的状态为删除
                        entry.State = EntityState.Deleted;
                        alert.SaveChanges();
                        //保存修改
                        r.Msg  = "信息删除成功";
                        r.Code = 0;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }
            return(r);
        }
        /// <summary>
        /// 新增历史报警策略
        /// </summary>
        public ReturnItem <RetHistoryAlertPolicies> AddHistoryAlertPolicies(HistoryAlertPoliciesModel parameter)
        {
            ReturnItem <RetHistoryAlertPolicies> r = new ReturnItem <RetHistoryAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    //新增历史报警策略
                    A_AlarmHistory newalert = new A_AlarmHistory()
                    {
                        DeviceID     = Convert.ToInt32(parameter.DeviceID),
                        DeviceItemID = Convert.ToInt32(parameter.DeviceItemID),
                        StrategyID   = Convert.ToInt32(parameter.StrategyID),
                        Value        = parameter.Value,
                        AlarmTime    = parameter.AlarmTime,
                        EndTime      = parameter.EndTime,
                        OrgID        = Convert.ToInt32(parameter.OrgID),
                    };
                    alert.A_AlarmHistory.Add(newalert);
                    alert.SaveChanges();

                    r.Msg  = "报警策略新增成功";
                    r.Code = 0;
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }

            return(r);
        }
        /// <summary>
        /// 获取报警策略个数
        /// </summary>
        /// <returns>成功返回设备列表,失败返回Null.</returns>
        public ReturnItem <string> GetAlertPoliciesNum(AlertPoliciesModel parameter)
        {
            ReturnItem <string> r = new ReturnItem <string>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var OrgID = Convert.ToInt32(parameter.OrgID);
                    var get   = alert.A_AlarmStrategy.Where(s => s.OrgID == OrgID).ToList();
                    if (get == null)
                    {
                        r.Msg  = "报警策略信息获取成功";
                        r.Code = 0;
                        r.Data = "0";
                        return(r);
                    }
                    if (get != null)
                    {
                        r.Msg  = "报警策略信息获取成功";
                        r.Code = 0;
                        r.Data = get.Count().ToString();
                        return(r);
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }

            return(r);
        }
        /// <summary>
        /// 删除报警策略信息
        /// </summary>
        public ReturnItem <RetAlertPolicies> DeleteAlertPolicies(AlertPoliciesModel parameter)
        {
            ReturnItem <RetAlertPolicies> r = new ReturnItem <RetAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var delete = alert.A_AlarmStrategy.Where(s => s.ID == parameter.ID).FirstOrDefault();
                    if (delete != null)
                    {
                        var entry = alert.Entry(delete);
                        //设置该对象的状态为删除
                        entry.State = EntityState.Deleted;
                        alert.SaveChanges();
                        //保存修改
                    }
                    r.Msg  = "报警策略信息删除成功";
                    r.Code = 0;
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }
            return(r);
        }
        /// <summary>
        /// 更新报警策略信息
        /// </summary>
        public ReturnItem <RetAlertPolicies> UpdateAlertPolicies(AlertPoliciesModel parameter)
        {
            ReturnItem <RetAlertPolicies> r = new ReturnItem <RetAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertInfo = alert.A_AlarmStrategy.Where(s => s.ID == parameter.ID).FirstOrDefault();
                    if (alertInfo == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "未找到该设备";
                        return(r);
                    }
                    if (alertInfo != null)
                    {
                        string TagMap = "";
                        if (parameter.TagList.Count > 0)
                        {
                            TagMap = JsonConvert.SerializeObject(parameter.TagList);
                        }
                        alertInfo.StrategyName  = parameter.StrategyName;
                        alertInfo.DeviceID      = Convert.ToInt32(parameter.DeviceID);
                        alertInfo.DataConnectID = Convert.ToInt32(parameter.DataConnectID);
                        alertInfo.TagMap        = TagMap;
                        alertInfo.DeviceItemId  = Convert.ToInt32(parameter.DeviceItemId);
                        alertInfo.Compare       = parameter.Compare;
                        alertInfo.Threshold     = parameter.Threshold;
                        alertInfo.Remark        = parameter.Remark;
                        alertInfo.UpdateTime    = DateTime.Now;
                        alertInfo.UpdateUserId  = parameter.UpdateUserId;
                        alertInfo.Interval      = Convert.ToInt32(parameter.Interval);
                        if (parameter.Active == "1")
                        {
                            alertInfo.Active = true;
                        }
                        else if (parameter.Active == "0")
                        {
                            alertInfo.Active = false;
                        }
                        alertInfo.OrgID = Convert.ToInt32(parameter.OrgID);
                        alert.SaveChanges();

                        r.Msg  = "报警策略更新成功";
                        r.Code = 0;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }
            return(r);
        }
            /// <summary>
            /// 处理报警逻辑(汉王数据接入使用)
            /// 1.是否命中报警策略
            /// 2.记录流水
            /// 3.发送消息
            /// </summary>
            /// <param name="deviceInfo"></param>
            /// <param name="itemInfo"></param>
            /// <param name="curValue"></param>
            /// <param name="now"></param>
            /// <returns></returns>
            private Task <int> HandleAlarmPolicies1(RetDeviceInfo deviceInfo, RetDeviceItemInfo itemInfo, string curValue, DateTime now)
            {
                int result = -1;

                using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
                {
                    var alertInfo = alert.A_AlarmStrategy.Where(s => (s.DeviceID == deviceInfo.ID) && (s.DeviceItemId == itemInfo.ID) && (s.Active == true)).FirstOrDefault();
                    if (null != alertInfo)
                    {
                        if (isHitPolicies(curValue, alertInfo.Compare, alertInfo.Threshold))
                        {
                            log.InfoFormat("[MQTT]Hit Policies,topic:{0}/{1},curValue:{2},compare:{3},theshold:{4}.", deviceInfo.DeviceLabel, itemInfo.PropertyLabel, curValue, alertInfo.Compare, alertInfo.Threshold);
                            HistoryAlertPoliciesBLL   historyBLL = new HistoryAlertPoliciesBLL();
                            HistoryAlertPoliciesModel model      = new HistoryAlertPoliciesModel()
                            {
                                DeviceID     = deviceInfo.ID.ToString(),
                                DeviceItemID = itemInfo.ID.ToString(),
                                StrategyID   = alertInfo.ID.ToString(),
                                Value        = curValue,
                                AlarmTime    = now,
                                EndTime      = now.AddSeconds(1),
                                OrgID        = alertInfo.OrgID.ToString(),
                            };
                            historyBLL.AddHistoryAlertPolicies(model);
                            // 发送消息通知
                            UserApi api = new UserApi();
                            GetMessageInfoParameter messageModel = new GetMessageInfoParameter()
                            {
                                Type   = "2", // 报警预警
                                Tittle = "【设备报警通知】" + deviceInfo.Name + itemInfo.Name + "报警!",
                                Text   = "<p>您好:</p><p class='ql-indent-1'>" + deviceInfo.Name + "(设备)" + itemInfo.Name + "(属性)当前数值为" + curValue + ",已触发预设报警策略,请及时处理异常!</p><p><br></p><p class='ql-align-right'>设备在线监测平台</p>",
                                OrgID  = alertInfo.OrgID.ToString()
                            };

                            var userApi = api.AddAlarmMessage(messageModel);
                            if (userApi.Code != 0)
                            {
                                log.ErrorFormat(userApi.Data);
                            }
                        }
                    }
                }
                return(new Task <int>(() => result));
            }
        /// <summary>
        /// 获取历史报警列表记录数据
        /// </summary>
        /// <returns>成功返回报警记录,失败返回Null.</returns>
        public ReturnItem <List <RetHistoryAlertPolicies> > GetHistoryAlertPoliciesDataList(HistoryAlertPoliciesModel parameter, List <RetDeviceInfo> Info)
        {
            ReturnItem <List <RetHistoryAlertPolicies> > r = new ReturnItem <List <RetHistoryAlertPolicies> >();
            List <RetHistoryAlertPolicies> listinfo        = new List <RetHistoryAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertList = alert.A_AlarmHistory.Join(alert.A_AlarmStrategy, x => x.StrategyID, x => x.ID, (a, b) => new { a, b }).AsQueryable();
                    if (parameter.StrategyName != null && !"".Equals(parameter.StrategyName))
                    {
                        alertList = alertList.Where(x => x.b.StrategyName.IndexOf(parameter.StrategyName) >= 0);
                    }
                    if (parameter.DeviceID != null && parameter.DeviceID != "")
                    {
                        if (parameter.DeviceItemIDList != null)
                        {
                            if (parameter.DeviceItemIDList.Count > 0)
                            {
                                var DeviceID = Convert.ToInt32(parameter.DeviceID);
                                alertList = alertList.Where(s => s.a.DeviceID == DeviceID && parameter.DeviceItemIDList.Contains(s.a.DeviceItemID.ToString()));
                            }
                        }
                        else
                        {
                            var DeviceID = Convert.ToInt32(parameter.DeviceID);
                            alertList = alertList.Where(s => s.a.DeviceID == DeviceID);
                        }
                    }
                    alertList = alertList.OrderByDescending(s => s.a.AlarmTime);
                    if (parameter.OrgID != null && !"".Equals(parameter.OrgID))
                    {
                        var OrgId = Convert.ToInt32(parameter.OrgID);
                        alertList = alertList.Where(x => x.a.OrgID == OrgId);
                    }
                    if (alertList == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "没有数据";
                        return(r);
                    }
                    if (alertList != null)
                    {
                        r.Count = alertList.Count();
                        if (parameter.PageIndex != 0 && parameter.PageSize != 0)
                        {
                            alertList = alertList.Skip((parameter.PageIndex - 1) * parameter.PageSize).Take(parameter.PageSize);
                        }
                        var list = alertList.ToList();

                        var compareValue = "";
                        foreach (var item in list)
                        {
                            if ("1".Equals(item.b.Compare))
                            {
                                compareValue = ">";
                            }
                            else if ("2".Equals(item.b.Compare))
                            {
                                compareValue = "≥";
                            }
                            else if ("3".Equals(item.b.Compare))
                            {
                                compareValue = "=";
                            }
                            else if ("4".Equals(item.b.Compare))
                            {
                                compareValue = "<";
                            }
                            else if ("5".Equals(item.b.Compare))
                            {
                                compareValue = "≤";
                            }
                            else if ("6".Equals(item.b.Compare))
                            {
                                compareValue = "≠";
                            }
                            var alertinfo = new RetHistoryAlertPolicies();
                            alertinfo.ID           = item.a.ID;
                            alertinfo.DeviceID     = item.a.DeviceID.ToString();
                            alertinfo.DeviceItemID = item.a.DeviceItemID.ToString();
                            alertinfo.StrategyID   = item.a.StrategyID.ToString();
                            alertinfo.StrategyName = item.b.StrategyName;
                            alertinfo.Value        = item.a.Value;
                            alertinfo.AlarmTime    = item.a.AlarmTime;
                            alertinfo.EndTime      = item.a.EndTime;
                            alertinfo.OrgID        = item.a.OrgID.ToString();
                            alertinfo.Compare      = item.b.Compare;
                            if (Info != null)
                            {
                                foreach (var DeviceInfo in Info)
                                {
                                    if (DeviceInfo.ID == item.a.DeviceID)
                                    {
                                        foreach (var DeviceItemInfo in DeviceInfo.DeviceItems)
                                        {
                                            if (DeviceItemInfo.ID == item.a.DeviceItemID)
                                            {
                                                alertinfo.DeviceName     = DeviceInfo.Name;
                                                alertinfo.DeviceItemName = DeviceItemInfo.Name;
                                                alertinfo.StrategyValue  = DeviceItemInfo.Name + compareValue + item.b.Threshold;
                                                listinfo.Add(alertinfo);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        r.Msg  = "历史报警信息获取成功";
                        r.Code = 0;
                        r.Data = listinfo;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                    return(r);
                }
            }
            return(r);
        }
        /// <summary>
        /// 获取统计报警信息列表
        /// </summary>
        /// <returns>成功返回列表,失败返回Null.</returns>
        public ReturnItem <List <RetAlarmReport> > GetAlarmReportList(AlarmReportModel parameter, List <RetDeviceInfo> Info)
        {
            ReturnItem <List <RetAlarmReport> > r = new ReturnItem <List <RetAlarmReport> >();
            List <RetAlarmReport> listinfo        = new List <RetAlarmReport>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertList = alert.A_AlarmHistory.AsQueryable();
                    if (parameter.OrgID.ToString() != null && parameter.OrgID.ToString() != "")
                    {
                        var OrgID = Convert.ToInt32(parameter.OrgID);
                        alertList = alertList.Where(s => s.OrgID == OrgID);
                    }
                    var list = alertList.GroupBy(a => a.DeviceID).Select(g => (new { DeviceID = g.Key })).ToList();
                    if (list == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "未找到统计报警信息";
                        return(r);
                    }
                    if (list != null)
                    {
                        List <long> idlist = new List <long>();
                        foreach (var id in list)
                        {
                            idlist.Add(id.DeviceID);
                        }
                        var TimeList = alert.A_AlarmHistory.AsQueryable();
                        // 报表周期
                        if (parameter.StartTime != null && parameter.StartTime != "" && parameter.EndTime != null && parameter.EndTime != "")
                        {
                            var StartTime = Convert.ToDateTime(parameter.StartTime);
                            var EndTime   = Convert.ToDateTime(parameter.EndTime);
                            TimeList = TimeList.Where(s => s.AlarmTime >= StartTime && s.EndTime <= EndTime);
                        }
                        TimeList = TimeList.Where(s => idlist.Contains(s.DeviceID));
                        foreach (var item in list)
                        {
                            var alertinfo = new RetAlarmReport();
                            alertinfo.DeviceID = item.DeviceID.ToString();
                            // 报警次数、报警总时长
                            Double        time = 0;
                            int           num  = 0;
                            List <string> data = new List <string>();
                            foreach (var info in TimeList)
                            {
                                if (item.DeviceID == info.DeviceID)
                                {
                                    time += (info.EndTime - info.AlarmTime).Value.TotalSeconds;
                                    num++;
                                }
                            }
                            alertinfo.AlarmNumber = num.ToString();
                            data.Add(num.ToString());
                            alertinfo.TotalTime = time.ToString();
                            data.Add(time.ToString());
                            alertinfo.AlertData = data;
                            // 设备名称
                            foreach (var DeviceInfo in Info)
                            {
                                if (DeviceInfo.ID == item.DeviceID)
                                {
                                    if (DeviceInfo.Name.IndexOf(parameter.DeviceName) >= 0)
                                    {
                                        // 设备分组
                                        if (parameter.GroupIDList != null && parameter.GroupIDList.Count > 0)
                                        {
                                            if (parameter.GroupIDList.Count() == 1 && parameter.GroupIDList[0] == null)
                                            {
                                                parameter.GroupIDList[0] = "0";
                                            }
                                            if (parameter.GroupIDList.Contains(DeviceInfo.GroupID))
                                            {
                                                alertinfo.DeviceName = DeviceInfo.Name;
                                                if (num > 0 && time > 0)
                                                {
                                                    // 报警次数
                                                    if (parameter.StartNumber != "" && parameter.EndNumber != "")
                                                    {
                                                        if (num >= Convert.ToInt32(parameter.StartNumber) && num <= Convert.ToInt32(parameter.EndNumber))
                                                        {
                                                            listinfo.Add(alertinfo);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        listinfo.Add(alertinfo);
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            alertinfo.DeviceName = DeviceInfo.Name;
                                            if (num > 0 && time > 0)
                                            {
                                                // 报警次数
                                                if (parameter.StartNumber != "" && parameter.EndNumber != "")
                                                {
                                                    if (num >= Convert.ToInt32(parameter.StartNumber) && num <= Convert.ToInt32(parameter.EndNumber))
                                                    {
                                                        listinfo.Add(alertinfo);
                                                    }
                                                }
                                                else
                                                {
                                                    listinfo.Add(alertinfo);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        r.Count = listinfo.Count;
                        r.Msg   = "报警策略信息获取成功";
                        r.Code  = 0;
                        r.Data  = listinfo;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }

            return(r);
        }
        /// <summary>
        /// 查看单个设备属性报警信息数据列表
        /// </summary>
        /// <returns>成功返回报警记录,失败返回Null.</returns>
        public ReturnItem <RetAlarmReportDetail> GetAlarmReportDetailDataList(AlarmReportItemModel parameter, List <RetDeviceInfo> Info)
        {
            ReturnItem <RetAlarmReportDetail> r     = new ReturnItem <RetAlarmReportDetail>();
            RetAlarmReportDetail      detail        = new RetAlarmReportDetail();
            List <RetAlarmReportItem> listinfo      = new List <RetAlarmReportItem>();
            List <RetChartInfo>       listchartinfo = new List <RetChartInfo>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertList = alert.A_AlarmHistory.AsQueryable();
                    if (parameter.AlarmTime != null && !"".Equals(parameter.AlarmTime))
                    {
                        alertList = alertList.Where(x => x.AlarmTime >= parameter.AlarmTime);
                    }
                    if (parameter.EndTime != null && !"".Equals(parameter.EndTime))
                    {
                        alertList = alertList.Where(x => x.EndTime <= parameter.EndTime);
                    }
                    if (parameter.OrgID != null && !"".Equals(parameter.OrgID))
                    {
                        var OrgId = Convert.ToInt32(parameter.OrgID);
                        alertList = alertList.Where(x => x.OrgID == OrgId);
                    }
                    if (parameter.DeviceID != null && !"".Equals(parameter.DeviceID))
                    {
                        if (parameter.DeviceItemIDList.Count > 0)
                        {
                            var DeviceID = Convert.ToInt32(parameter.DeviceID);
                            alertList = alertList.Where(s => s.DeviceID == DeviceID && parameter.DeviceItemIDList.Contains(s.DeviceItemID.ToString()));
                        }
                        else
                        {
                            var DeviceID = Convert.ToInt32(parameter.DeviceID);
                            alertList = alertList.Where(s => s.DeviceID == DeviceID);
                        }
                    }
                    alertList = alertList.OrderByDescending(s => s.AlarmTime);
                    if (alertList == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "没有数据";
                        return(r);
                    }
                    if (alertList != null)
                    {
                        r.Count = alertList.Count();
                        if (parameter.PageIndex != 0 && parameter.PageSize != 0)
                        {
                            alertList = alertList.Skip((parameter.PageIndex - 1) * parameter.PageSize).Take(parameter.PageSize);
                        }
                        List <A_AlarmHistory> list         = alertList.ToList <A_AlarmHistory>();
                        List <string>         compareValue = new List <string>();
                        foreach (var item in list)
                        {
                            var alertinfo = new RetAlarmReportItem();
                            alertinfo.ID           = item.ID;
                            alertinfo.DeviceID     = item.DeviceID.ToString();
                            alertinfo.DeviceItemID = item.DeviceItemID.ToString();
                            alertinfo.StrategyID   = item.StrategyID.ToString();
                            alertinfo.Value        = item.Value;
                            alertinfo.AlarmTime    = item.AlarmTime;
                            alertinfo.EndTime      = item.EndTime;
                            alertinfo.OrgID        = item.OrgID.ToString();
                            var chartinfo = new RetChartInfo();
                            foreach (var DeviceInfo in Info)
                            {
                                if (DeviceInfo.ID == item.DeviceID)
                                {
                                    foreach (var DeviceItemInfo in DeviceInfo.DeviceItems)
                                    {
                                        if (DeviceItemInfo.ID == item.DeviceItemID)
                                        {
                                            alertinfo.DeviceName     = DeviceInfo.Name;
                                            alertinfo.DeviceItemName = DeviceItemInfo.Name;
                                            listinfo.Add(alertinfo);
                                            if (compareValue == null || (compareValue != null && !compareValue.Exists(x => x == item.DeviceItemID.ToString())))
                                            {
                                                compareValue.Add(item.DeviceItemID.ToString());
                                                chartinfo.DeviceItemName = DeviceItemInfo.Name;
                                                chartinfo.DeviceItemID   = DeviceItemInfo.ID;
                                                listchartinfo.Add(chartinfo);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        detail.AlarmReportItem = listinfo;
                        detail.ChartInfo       = listchartinfo;
                        r.Msg  = "统计属性报警信息获取成功";
                        r.Code = 0;
                        r.Data = detail;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                    return(r);
                }
            }
            return(r);
        }
        /// <summary>
        /// 新增报警策略列表
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>

        //public ReturnItem<List<RetAlertPolicies>> AddAlertPoliciesInfoList(AlertPoliciesListModel parameter)
        //{
        //    ReturnItem<List<RetAlertPolicies>> r = new ReturnItem<List<RetAlertPolicies>>();
        //    using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
        //    {
        //        try
        //        {
        //            var message = alert.A_AlarmStrategy.Where(s => s.StrategyName == parameter.StrategyName).FirstOrDefault();
        //            if (message != null)
        //            {
        //                r.Data = null;
        //                r.Code = -1;
        //                r.Msg = "报警策略已存在";
        //                return r;
        //            }
        //            if (message == null)
        //            {
        //                foreach (var item in parameter.Property)
        //                {
        //                    string TagMap = "";
        //                    if (item.TagList.Count > 0)
        //                    {
        //                        TagMap = JsonConvert.SerializeObject(item.TagList);
        //                    }
        //                    //新增报警策略
        //                    A_AlarmStrategy newalert = new A_AlarmStrategy()
        //                    {
        //                        StrategyName = parameter.StrategyName,
        //                        DeviceID = Convert.ToInt32(item.DeviceID),
        //                        DataConnectID = Convert.ToInt32(item.DataConnectID),
        //                        DeviceItemId = Convert.ToInt32(item.DeviceItemId),
        //                        Compare = item.Compare,
        //                        Threshold = item.Threshold,
        //                        Remark = parameter.Remark,
        //                        CreateUserID = parameter.CreateUserID,
        //                        CreateTime = DateTime.Now,
        //                        Interval = Convert.ToInt32(parameter.Interval),
        //                        OrgID = Convert.ToInt32(parameter.OrgID),
        //                    };
        //                    if (TagMap != "")
        //                    {
        //                        newalert.TagMap = TagMap;
        //                    }
        //                    if (parameter.Active == "1")
        //                    {
        //                        newalert.Active = true;
        //                    }
        //                    else if (parameter.Active == "0")
        //                    {
        //                        newalert.Active = false;
        //                    }
        //                    alert.A_AlarmStrategy.Add(newalert);
        //                    alert.SaveChanges();

        //                    r.Msg = "报警策略新增成功";
        //                    r.Code = 0;
        //                }
        //            }
        //        }
        //        catch (Exception e)
        //        {
        //            r.Msg = "内部错误请重试";
        //            log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
        //            r.Code = -1;
        //        }
        //    }

        //    return r;
        //}

        /// <summary>
        /// 利用ID获取报警策略信息
        /// </summary>
        /// <returns>成功返回用户信息,失败返回Null.</returns>
        public ReturnItem <RetAlertPolicies> GetAlertPoliciesInfoByID(AlertPoliciesModel parameter)
        {
            ReturnItem <RetAlertPolicies> r = new ReturnItem <RetAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertInfo = alert.A_AlarmStrategy.Where(x => x.ID == parameter.ID).FirstOrDefault();
                    if (alertInfo == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "未找到设备";
                        return(r);
                    }
                    if (alertInfo != null)
                    {
                        r.Msg  = "设备模板获取成功";
                        r.Code = 0;
                        r.Data = new RetAlertPolicies()
                        {
                            ID            = alertInfo.ID.ToString(),
                            StrategyName  = alertInfo.StrategyName,
                            DeviceID      = alertInfo.DeviceID.ToString(),
                            DataConnectID = alertInfo.DataConnectID.ToString(),
                            DeviceItemId  = alertInfo.DeviceItemId.ToString(),
                            Compare       = alertInfo.Compare,
                            Threshold     = alertInfo.Threshold,
                            Remark        = alertInfo.Remark,
                            CreateUserID  = alertInfo.CreateUserID.ToString(),
                            CreateTime    = alertInfo.CreateTime,
                            UpdateUserId  = alertInfo.UpdateUserId.ToString(),
                            UpdateTime    = alertInfo.UpdateTime,
                            Interval      = alertInfo.Interval.ToString(),
                            OrgID         = alertInfo.OrgID.ToString()
                        };
                        if (alertInfo.Active == true)
                        {
                            r.Data.Active = "1";
                        }
                        else if (alertInfo.Active == false)
                        {
                            r.Data.Active = "0";
                        }
                        // 获取TagList
                        List <RetTagMap> taglist = new List <RetTagMap>();
                        if (alertInfo.TagMap != "" && alertInfo.TagMap != null)
                        {
                            taglist = JsonConvert.DeserializeObject <List <RetTagMap> >(alertInfo.TagMap);
                        }
                        r.Data.TagList = taglist;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }
            return(r);
        }
        /// <summary>
        /// 获取报警策略列表
        /// </summary>
        /// <returns>成功返回设备列表,失败返回Null.</returns>
        public ReturnItem <List <RetAlertPolicies> > GetAlertPoliciesList(AlertPoliciesModel parameter, List <RetDeviceInfo> Info)
        {
            ReturnItem <List <RetAlertPolicies> > r = new ReturnItem <List <RetAlertPolicies> >();
            List <RetAlertPolicies> listinfo        = new List <RetAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var alertList = alert.A_AlarmStrategy.AsQueryable();
                    if (parameter.StrategyName != null && parameter.StrategyName != "")
                    {
                        alertList = alertList.Where(s => s.StrategyName.IndexOf(parameter.StrategyName) >= 0);
                    }
                    if (parameter.DeviceID != null && parameter.DeviceID != "")
                    {
                        if (parameter.DeviceItemIDList.Count > 0)
                        {
                            var DeviceID = Convert.ToInt32(parameter.DeviceID);
                            alertList = alertList.Where(s => s.DeviceID == DeviceID && parameter.DeviceItemIDList.Contains(s.DeviceItemId.ToString()));
                        }
                        else
                        {
                            var DeviceID = Convert.ToInt32(parameter.DeviceID);
                            alertList = alertList.Where(s => s.DeviceID == DeviceID);
                        }
                    }
                    if (parameter.OrgID.ToString() != null && parameter.OrgID.ToString() != "")
                    {
                        var OrgID = Convert.ToInt32(parameter.OrgID);
                        alertList = alertList.Where(s => s.OrgID == OrgID);
                    }
                    alertList = alertList.OrderByDescending(s => s.CreateTime);
                    if (alertList == null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "未找到报警策略";
                        return(r);
                    }
                    if (alertList != null)
                    {
                        List <A_AlarmStrategy> list = alertList.ToList <A_AlarmStrategy>();
                        foreach (var item in list)
                        {
                            var alertinfo = new RetAlertPolicies();
                            alertinfo.ID            = item.ID.ToString();
                            alertinfo.StrategyName  = item.StrategyName;
                            alertinfo.DeviceID      = item.DeviceID.ToString();
                            alertinfo.DataConnectID = item.DataConnectID.ToString();
                            // 获取TagList
                            List <RetTagMap> taglist = new List <RetTagMap>();
                            if (item.TagMap != "" && item.TagMap != null)
                            {
                                taglist = JsonConvert.DeserializeObject <List <RetTagMap> >(item.TagMap);
                            }
                            alertinfo.TagList = taglist;

                            alertinfo.DeviceItemId = item.DeviceItemId.ToString();
                            alertinfo.Compare      = item.Compare;
                            alertinfo.Threshold    = item.Threshold;
                            alertinfo.Remark       = item.Remark;
                            alertinfo.CreateTime   = item.CreateTime;
                            alertinfo.CreateUserID = item.CreateUserID.ToString();
                            alertinfo.UpdateTime   = item.UpdateTime;
                            alertinfo.UpdateUserId = item.UpdateUserId.ToString();
                            alertinfo.Interval     = item.Interval.ToString();
                            alertinfo.Active       = item.Active.ToString();
                            alertinfo.OrgID        = item.OrgID.ToString();
                            foreach (var DeviceInfo in Info)
                            {
                                if (DeviceInfo.ID == item.DeviceID)
                                {
                                    foreach (var DeviceItemInfo in DeviceInfo.DeviceItems)
                                    {
                                        if (DeviceItemInfo.ID == item.DeviceItemId)
                                        {
                                            alertinfo.DeviceName     = DeviceInfo.Name;
                                            alertinfo.DeviceItemName = DeviceItemInfo.Name;
                                            listinfo.Add(alertinfo);
                                        }
                                    }
                                }
                            }
                        }

                        r.Count = listinfo.Count();
                        r.Msg   = "报警策略信息获取成功";
                        r.Code  = 0;
                        r.Data  = listinfo;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }

            return(r);
        }
        /// <summary>
        /// 新增报警策略
        /// </summary>
        public ReturnItem <RetAlertPolicies> AddAlertPoliciesInfo(AlertPoliciesModel parameter)
        {
            ReturnItem <RetAlertPolicies> r = new ReturnItem <RetAlertPolicies>();

            using (AlertPoliciesEntities alert = new AlertPoliciesEntities())
            {
                try
                {
                    var message = alert.A_AlarmStrategy.Where(s => s.StrategyName == parameter.StrategyName).FirstOrDefault();
                    if (message != null)
                    {
                        r.Data = null;
                        r.Code = -1;
                        r.Msg  = "报警策略已存在";
                        return(r);
                    }
                    if (message == null)
                    {
                        string TagMap = "";
                        if (parameter.TagList.Count > 0)
                        {
                            TagMap = JsonConvert.SerializeObject(parameter.TagList);
                        }
                        //新增报警策略
                        A_AlarmStrategy newalert = new A_AlarmStrategy()
                        {
                            StrategyName  = parameter.StrategyName,
                            DeviceID      = Convert.ToInt32(parameter.DeviceID),
                            DataConnectID = Convert.ToInt32(parameter.DataConnectID),
                            DeviceItemId  = Convert.ToInt32(parameter.DeviceItemId),
                            Compare       = parameter.Compare,
                            Threshold     = parameter.Threshold,
                            Remark        = parameter.Remark,
                            CreateUserID  = parameter.CreateUserID,
                            CreateTime    = DateTime.Now,
                            Interval      = Convert.ToInt32(parameter.Interval),
                            OrgID         = Convert.ToInt32(parameter.OrgID),
                        };
                        if (TagMap != "")
                        {
                            newalert.TagMap = TagMap;
                        }
                        if (parameter.Active == "1")
                        {
                            newalert.Active = true;
                        }
                        else if (parameter.Active == "0")
                        {
                            newalert.Active = false;
                        }
                        alert.A_AlarmStrategy.Add(newalert);
                        alert.SaveChanges();

                        r.Msg  = "报警策略新增成功";
                        r.Code = 0;
                    }
                }
                catch (Exception e)
                {
                    r.Msg = "内部错误请重试";
                    log.ErrorFormat("内部错误:{0},{1}", e.Message, e.StackTrace);
                    r.Code = -1;
                }
            }

            return(r);
        }