1. 程式人生 > >PCB 後臺自動系統集成與郵件推送實現

PCB 後臺自動系統集成與郵件推送實現

rom font from 實現 path ewma tpc 定時任務 進行

在PCB行業中,工程系統是主要數據生產者,而這些數據不僅僅給自己系統使用呀,我們需要將數據傳遞到各系統,才達到各系統共同協作的目的。

這裏以問答方式對實現方式進行講解。呵呵呵!

後臺自動集成問題解答:

一.工程系統中數據是主動推送還是被動拉取?

工程系統中的數據通常采用是主動推送到各系統中去的(MES,OMS,APS,ADD,ERP,集成平臺)

二.工程系統與多少個系統集成,集成關系圖是怎麽的呢?

目前工程與6個系統有集成關系,集成關系圖如下所示。

技術分享圖片

三.怎麽實現後臺自動集成的?

當工程MI流程指示上網或某一個節點的狀態完成後,即開始將工程數據與狀態節點信息等集成到公司各系統

我們制作了一個後臺定時檢測節點狀態已完成了但數據集成未成功生產型號,

並將這些未集成成功的型號篩選出來放進待自動集成的訂單池中,在後臺定時任務進行跑集成.

四.采用什麽的方式進行定時任務?

我們采用的是Windows任務計劃程序,將集成的程序掛在任務計劃程序上面,進行定時觸發批量集成程序 ,由於此工具穩定可靠,所以采用了此方式實現。

技術分享圖片

五.由於數據集成是後臺集成,是否有界面供用戶可以可以查看集成狀態呢?

那當然啦,這是系統上設計最基本的,我們增加了一個模塊專用於所有監控集成的狀態信息.

技術分享圖片

六.由於是後臺自動集成,是否有預警功能,當集成失敗後是否通知到對應的人處理?

有呀,目前設置的次數是:當集成失敗次數大於3次時,後臺自動發送郵件通知對應的人處理。

這是發送樣例:

技術分享圖片

七.後臺自動郵件用的哪種方式發送?

采用的是配置公司郵件主機IP與端口號的方式發送郵件

代碼如下(不需要安裝客戶端):

   /// <summary>
        /// 發送郵件
        /// </summary>
        /// <param name="mailSubjct">郵件主題</param>
        /// <param name="mailBody">郵件正文</param>
/// <param name="mailFrom">發送者</param> /// <param name="mailAddress">接收地址列表</param> /// <param name="HostIP">主機IP</param> /// <param name="filename">附件名</param> /// <param name="username">用戶名</param> /// <param name="password">密碼</param> /// <param name="ssl">加密類型</param> /// <returns></returns> public static string sendMail(string mailSubjct, string mailBody, string mailFrom, List<string> mailAddress, string HostIP, string filename, string username, string password, bool ssl) { string str = ""; try { MailMessage message = new MailMessage { IsBodyHtml = false, Subject = mailSubjct, Body = mailBody, From = new MailAddress(mailFrom) }; for (int i = 0; i < mailAddress.Count; i++) { message.To.Add(mailAddress[i]); } if (System.IO.File.Exists(filename)) { message.Attachments.Add(new Attachment(filename)); } SmtpClient client = new SmtpClient { EnableSsl = ssl, UseDefaultCredentials = false }; NetworkCredential credential = new NetworkCredential(username, password); client.Credentials = credential; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Host = HostIP; client.Port = 0x19; client.Send(message); } catch (Exception exception) { str = exception.Message; } return str; }

八.為什麽不采用OutLook郵件發送?

原因1:由於自動集成的任務布署在服務端,沒有安裝OutLook

原因2:哪怕服務端安裝了OutLook客戶端也不建議采用,後臺自動推送郵件不適合用OutLook,

OutLook最佳應用場景:工程系統采用的是CS架構,在C端執行某個功能按鈕後,需要發郵件通知對方,可以采用此方式實現。

並且可以在發件箱中查看已發送的郵件信息哦。

代碼如下(需安裝OutLook客戶端):

        /// <summary>
        /// OutLook發送郵件方法
        /// </summary>
        /// <param name="mailFrom">發件人,無實際效果</param>
        /// <param name="sendTo">收件人</param>
        /// <param name="copyTo">抄送,以字符‘;‘分割</param>
        /// <param name="subject">主題</param>
        /// <param name="body">郵件內容</param>
        /// <param name="isFj">是否有附件</param>
        /// <param name="FjPath">附件地址</param>
        /// <returns></returns>
        public static string OutlookSendMail(string mailFrom, string sendTo, string copyTo, string subject, string body, bool isFj, string FjPath)
        {
            StringBuilder buff = new StringBuilder();
            string[] mailccAddressList = copyTo.Split(;);
            for(int i=0;i< mailccAddressList.Length;i++)
            {
                buff.AppendFormat("{0}<{1}> ; ", "", mailccAddressList[i]);
            }
            Microsoft.Office.Interop.Outlook.Application outlookApp = new Microsoft.Office.Interop.Outlook.Application();
            try
            {
                Microsoft.Office.Interop.Outlook.MailItem newMail = (Microsoft.Office.Interop.Outlook.MailItem)outlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
                newMail.To = sendTo;  
                newMail.Subject = subject;
                newMail.CC = buff.ToString();
                newMail.Body = body;
                if (isFj)
                {
                    foreach (var FjPath_ in FjPath.Split(;))
                    {
                        newMail.Attachments.Add(FjPath_);
                    }
                    
                }
                newMail.Send();
                return "成功";
            }
            catch(Exception ex)
            {               
                return ex.Message;
            }
        }

寫到最後:事在人為,只要去想做,總有辦法,不想去做總要理由

PCB 後臺自動系統集成與郵件推送實現