PCB 后台自动系统集成与邮件推送实现

在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;
            }
        }

 写到最后:事在人为,只要去想做,总有办法,不想去做总要理由

猜你喜欢

转载自www.cnblogs.com/pcbren/p/9501179.html
PCB