Exemple #1
0
        public IHttpActionResult AddAlarmMessageInside(GetMessageInfoParameter parm)
        {
            MessageBLL msg = new MessageBLL();
            var        get = msg.AddAlarmMessageInside(parm);

            return(InspurJson <string>(get, true));
        }
        /// <summary>
        /// 新增报警信息(内部调用)
        /// </summary>
        public ReturnItem <string> AddAlarmMessageInside(GetMessageInfoParameter parameter)
        {
            ReturnItem <string> r = new ReturnItem <string>();

            using (UserEntities user = new UserEntities())
            {
                try
                {
                    //新增报警信息
                    U_Message message = new U_Message()
                    {
                        Type       = parameter.Type,
                        Tittle     = parameter.Tittle,
                        Text       = parameter.Text,
                        CreateTime = DateTime.Now
                    };
                    user.U_Message.Add(message);
                    user.SaveChanges();
                    //查询当前组织下用户id
                    int           OrgID       = Convert.ToInt32(parameter.OrgID);
                    var           getuserinfo = user.U_UserOrganizationRel.Where(m => m.OrgID == OrgID).ToList();
                    List <string> userinfo    = new List <string>();
                    foreach (var info in getuserinfo)
                    {
                        userinfo.Add(info.UserID.ToString());
                    }
                    //新增用户消息关联表
                    var getinfo = user.U_Message.OrderByDescending(m => m.CreateTime).FirstOrDefault();
                    foreach (var item in userinfo)
                    {
                        U_UserMessageRel newrel = new U_UserMessageRel()
                        {
                            UserID     = Convert.ToInt32(item),
                            MessageID  = getinfo.ID,
                            Status     = "0",
                            CreateTime = DateTime.Now
                        };
                        user.U_UserMessageRel.Add(newrel);
                    }
                    user.SaveChanges();

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

            return(r);
        }
        /// <summary>
        /// 添加报警信息
        /// </summary>
        /// <returns></returns>
        public ReturnItem <string> AddAlarmMessage(GetMessageInfoParameter parameter)
        {
            WebApiPostParameter wparameter = new WebApiPostParameter()
            {
                Url = CustomConfigParam.UserApiUrl + "Api/Message/AddAlarmMessageInside"
            };

            wparameter.Content.Add("Type", parameter.Type);
            wparameter.Content.Add("Tittle", parameter.Tittle);
            wparameter.Content.Add("Text", parameter.Text);
            wparameter.Content.Add("OrgID", parameter.OrgID);
            return(new WebApiHelper().GetEntity <string>(wparameter));
        }
            /// <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));
            }