コード例 #1
0
        /// <summary>
        /// 异常通知
        /// </summary>
        /// <param name="errorObject"></param>
        /// <param name="Level">层级</param>
        /// <param name="EventFlow">事件流程</param>
        /// <param name="Subject">主题</param>
        /// <param name="Content">内容</param>
        /// <param name="FinishedMode">最后完成模式,通知已通知人员</param>
        public async Task SendErrorMessageAsync(ErrorObject errorObject, int Level, EventHandleFlowEnum EventFlow,
                                                string Subject, string Content, bool FinishedMode = false)
        {
            List <person> persons;
            List <string> infoList = new List <string>();

            persons = GetMsgedPersonList(errorObject, Level, EventFlow, FinishedMode); //获取需要通知的人员列表
            bool res = await PostMessageToLuyuan(errorObject, EventFlow, persons);     //对外发送信息

            if (errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.All ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.WeChat ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.WeChat_Broadcast ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.WeChat_Email)
            {
                //微信通知
                foreach (person p in persons)
                {
                    infoList.Add(p.user_name);
                }
                WeChatHelper.SendWeChatMessage(infoList, Content);
            }
            if (errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.All ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.Email ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.Email_Broadcast ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.WeChat_Email)
            {
                infoList = new List <string>();
                //邮件通知
                foreach (person p in persons)
                {
                    infoList.Add(p.user_email);
                }
                MailHelper.SendMail(infoList, Subject, Content);
            }
            if (errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.All ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.Broadcast ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.Email_Broadcast ||
                errorObject.eConfig.trigger_message_type == (int)ErrorMsgType.WeChat_Broadcast)
            {
                //语音通知
                //speechSynth.Speak(Content);
                if (SpeechTag != null)
                {
                    if (ScadaAPIConfig.EnableScadaApi)
                    {
                        ScadaAPIHelper.WriteValueAsync(SpeechTag.tag_code, Content);
                    }
                    else
                    {
                        //MqttManager.MqttHelper.WriteValueToWA(SpeechTag.tag_code, Content, true);//输出语音播报文本信息
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 获取发送通知的人员列表
        /// </summary>
        /// <param name="errorObject">异常对象</param>
        /// <param name="Level">等级</param>
        /// <param name="EventFlow">事件流程点</param>
        /// <param name="FinishedMode">完成模式</param>
        /// <returns></returns>
        public List <person> GetMsgedPersonList(ErrorObject errorObject, int Level, EventHandleFlowEnum EventFlow,
                                                bool FinishedMode = false)
        {
            List <person>         persons  = new List <person>();
            List <string>         infoList = new List <string>();
            List <ErrorCfgPerson> ePersons = new List <ErrorCfgPerson>();
            string classNo = classInfoManager.GetCurrentClassNo();//当前班次

            if (FinishedMode == false)
            {
                if (EventFlow == EventHandleFlowEnum.Event_Timeout)//超时加载人员为当前级别以及向下一级
                {
                    ePersons = errorObject.eCfgPersonList.Where(x => (x.eCfgPerson.person_level == Level || x.eCfgPerson.person_level == (Level - 1)) &&
                                                                x.eCfgPerson.class_no.Equals(classNo)).ToList();//获取多级配置人员列表
                }
                else
                {
                    if (errorObject.eConfig.message_multilevel == 1 && Level < (int)MessageLevel.Level3)//多级人员发送模式
                    {
                        ePersons = errorObject.eCfgPersonList.Where(x => (x.eCfgPerson.person_level == Level || x.eCfgPerson.person_level == Level + 1) &&
                                                                    x.eCfgPerson.class_no.Equals(classNo)).ToList();//获取多级配置人员列表
                    }
                    else
                    {
                        ePersons = errorObject.eCfgPersonList.Where(x => x.eCfgPerson.person_level == Level &&
                                                                    x.eCfgPerson.class_no.Equals(classNo)).ToList();     //获取当前级别配置人员列表
                    }
                }

                foreach (var item in ePersons)
                {
                    if (item.ePerson != null)
                    {
                        //判断此人员是否已经通知过,通知过则去除不重复通知
                        if (errorObject.eMsgedPersonList.Any(x => x.eLogPerson.error_log_id == errorObject.ELog.id &&
                                                             x.eLogPerson.person_id == item.ePerson.id &&
                                                             x.eLogPerson.message_flow == EventFlow.ToString() &&
                                                             x.eLogPerson.message_level == item.eCfgPerson.person_level) == false)
                        {
                            persons.Add(item.ePerson);
                            ErrorLogPerson eLogPersonObject = new ErrorLogPerson();
                            //记录已通知人员
                            error_log_person ePerson = errorLogPersonManager.InsertMessagePerson(errorObject.ELog.id, item.ePerson.id, item.eCfgPerson.person_level, EventFlow);
                            eLogPersonObject.ePerson    = item.ePerson;
                            eLogPersonObject.eLogPerson = ePerson;
                            errorObject.eMsgedPersonList.Add(eLogPersonObject);
                        }
                    }
                }
            }
            else
            {
                //结束模式需去除已经为事件确认标识的人员
                foreach (var item in errorObject.eMsgedPersonList.Where(x => x.eLogPerson.message_flow != EventFlow.ToString())) //为结束模式,则取出已通知的人员
                {
                    if (!persons.Any(x => x.id == item.ePerson.id))                                                              //去除重复项
                    {
                        errorLogPersonManager.InsertMessagePerson(errorObject.ELog.id, item.ePerson.id, item.eLogPerson.message_level, EventFlow);
                        persons.Add(item.ePerson);
                    }
                }
            }
            return(persons);
        }
コード例 #3
0
        /// <summary>
        /// 人员通知时向绿源抛送信息,此接口为定制
        /// </summary>
        /// <param name="errorObject">安灯对象</param>
        /// <param name="EventFlow">流程节点</param>
        /// <param name="Persons">人员清单</param>
        /// <returns></returns>
        public async Task <bool> PostMessageToLuyuan(ErrorObject errorObject, EventHandleFlowEnum EventFlow, List <person> Persons)
        {
            if (EventFlow != EventHandleFlowEnum.Event_Trigger && EventFlow != EventHandleFlowEnum.Event_Timeout)//只有事件发生时需要通知
            {
                return(false);
            }
            try
            {
                string    ApiBaseUrl = "https://api.luyuan.cn/MESApi/GetErrorMsg";
                line_info line       = AndonGlobalCfg.LinesList.FirstOrDefault(x => x.line_id == errorObject.ELog.line_id);
                //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                foreach (person p in Persons)
                {
                    try
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ApiBaseUrl);
                        request.ContentType = "application/json; charset=utf-8";
                        request.Method      = "POST";
                        request.Headers.Add("api-key", "23333");
                        request.Headers.Add("api-sign", "463fbc8ffc4f1da5bbc94ffc5b911ae5b76ff3cd0ee1196ef978b079f74acce7");

                        String Body = "{\"触发时间\":\"" + errorObject.ELog.start_time + "\"," +
                                      "\"呼叫用户姓名\":\"" + p.user_name + "\"," +
                                      "\"呼叫号码\":\"" + p.mobile_phone + "\"," +
                                      "\"流水线名称\":\"" + line.line_name_en + "\"," +
                                      "\"站别名称\":\"" + errorObject.DeviceCode + "\"," +
                                      "\"问题类型\":\"" + errorObject.ELog.error_name + "\"}";
                        byte[] buffer = Encoding.UTF8.GetBytes(Body);
                        //request.ContentLength = buffer.Length;
                        //request.GetRequestStream().Write(buffer, 0, buffer.Length);
                        Stream newStream = await request.GetRequestStreamAsync().ConfigureAwait(false);

                        newStream.Write(buffer, 0, buffer.Length);
                        newStream.Close();
                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            string ret = reader.ReadToEnd();

                            if (ret.ToLower().Trim().Contains("statuscode: 200"))
                            {
                                //continue;
                            }
                            else
                            {
                                srpLogManager.Insert("PostMessageToLuyuan failed=" + Body);
                            }
                            Console.WriteLine("PostMessageToLuyuan=" + ret);
                        }
                        response.Close();
                    }
                    catch (WebException ex)
                    {
                        Console.WriteLine("PostMessageToLuyuan error=" + ex.Message);
                        srpLogManager.Insert("PostMessageToLuyuan error=" + ex.Message);
                        WebResponse errResp = ex.Response;
                        using (Stream respStream = errResp.GetResponseStream())
                        {
                            StreamReader reader = new StreamReader(respStream);
                            string       text   = reader.ReadToEnd();
                            Console.WriteLine(text);
                            srpLogManager.Insert("PostMessageToLuyuan error=" + text);
                        }
                        return(false);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine("PostMessageToLuyuan error=" + ex.Message);
                srpLogManager.Insert("PostMessageToLuyuan error=" + ex.Message);
            }
            return(false);
        }
コード例 #4
0
        /// <summary>
        /// 记录通知的人员信息
        /// </summary>
        /// <param name="LogId"></param>
        /// <param name="PersonId"></param>
        /// <param name="Level"></param>
        public error_log_person InsertMessagePerson(int LogId, int PersonId, int Level, EventHandleFlowEnum eventHandleFlowEnum)
        {
            int id = -1;
            error_log_person ePerson = new error_log_person();

            ePerson.error_log_id  = LogId;
            ePerson.message_level = Level;
            ePerson.person_id     = PersonId;
            ePerson.insert_time   = DateTime.Now.AddHours(GlobalDefine.SysTimeZone);
            ePerson.message_flow  = eventHandleFlowEnum.ToString();
            id = errorLogPersonService.Insert(ePerson);
            if (id >= 0)
            {
                ePerson.id = id;
            }
            return(ePerson);
        }