通过api向外发送报告清单邮件

 #region 报告清单邮件发送
        /// <summary>
        /// 报告清单邮件发送
        /// </summary>
        /// <param name="_dtLisSelectedIn">发送pdf的数据</param>
        /// <param name="bIsPreView">是否打印</param>
        /// <param name="bCallAferEvent"></param>
        /// <param name="BatchNo">批次号</param>
        /// <param name="isAgain">是否重发</param>
        /// <param name="IsPrint">是否打印还是发送PDF邮件</param>
        public void PrintList(DataTable _dtLisSelectedIn, bool bIsPreView, bool bCallAferEvent, string BatchNo = "", bool isAgain = false, bool IsPrint = true)
        {
            if (_dtLisSelectedIn == null)
                return;
            ReportDal dal = ReportDal.Instance();
            DateTime detReportPrint = dal.GetServerTime();

            DataTable dtLisSelected = _dtLisSelectedIn.Copy();
            dtLisSelected.TableName = "LIS_LAB_BARCODE";
            string[] arrGroupColumns = new string[] { "HSP_ORG_NAME", "HSP_ORG_CODE" };
            DataTable dtHspOrgInfo = dtLisSelected.DefaultView.ToTable(true, arrGroupColumns);
            foreach (DataRow drHspOrg in dtHspOrgInfo.Rows)
            {
                string strHspOrgNameSeleted = drHspOrg["HSP_ORG_NAME"].ToString();
                string strHspOrgCodeSelected = drHspOrg["HSP_ORG_CODE"].ToString();
                DataRow[] drsSelected = dtLisSelected.Select(string.Format("HSP_ORG_NAME='{0}'", strHspOrgNameSeleted), "REPORT_NO");
                DataTable dtLisSelected2 = new DataTable("LIS_LAB_BARCODE");
                foreach (DataColumn dc in dtLisSelected.Columns)
                {
                    dtLisSelected2.Columns.Add(dc.ColumnName, dc.DataType);
                }
                List<string> lstHspPrintBarCode = new List<string>();
                List<string> lstExistsMainBarCode = new List<string>();
                List<string> lstPersons = new List<string>();
                foreach (DataRow dr in drsSelected)
                {
                    string strBarCode = dr["BarCode"].ToString().Trim();
                    string strReportNo = dr["REPORT_NO"].ToString().Trim();
                    if (!lstExistsMainBarCode.Contains(strReportNo))
                    {
                        dtLisSelected2.Rows.Add(dr.ItemArray);
                        lstExistsMainBarCode.Add(strReportNo);
                    }
                    lstHspPrintBarCode.Add(strBarCode + "," + dr["Sample_No"].ToString() + "," + dr["Test_Date"].ToString() + "," + dr["Group_Code"].ToString());
                    //判断一个人的信息
                    string strOnePersonInfo = dr["PATIENT_NO"].ToString().Trim() + dr["Patient_name"].ToString().Trim() + dr["SEX"].ToString().Trim();
                    if (!lstPersons.Contains(strOnePersonInfo))
                    {
                        lstPersons.Add(strOnePersonInfo);
                    }
                }
                //检验明细项目
                DataTable dtPrintTestItem = dal.GetLabBarCodeItemsInfo(lstHspPrintBarCode);
                dtPrintTestItem.TableName = "LIS_LAB_BARCODE_TESTITEM";
                //数据源
                DataSet dsReport = new DataSet("dsLisLabBarCode");
                #region 处理数据及关系
                //增加序号字段
                if (!dtLisSelected2.Columns.Contains("SortNo"))
                {
                    dtLisSelected2.Columns.Add("SortNo", typeof(int));
                }
                //给序号字段赋值
                for (int i = 0; i < dtLisSelected2.Rows.Count; i++)
                {
                    dtLisSelected2.Rows[i]["SortNo"] = i + 1;
                }
                dsReport.Tables.Add(dtLisSelected2.Copy());
                dsReport.Tables.Add(dtPrintTestItem.Copy());

                DataColumn dcParent = dsReport.Tables["LIS_LAB_BARCODE"].Columns["REPORT_NO"];
                DataColumn dcChild = dsReport.Tables["LIS_LAB_BARCODE_TESTITEM"].Columns["MAIN_BARCODE"];
                DataRelation drelation = new DataRelation("BarCodefkc", dcParent, dcChild);
                dsReport.Relations.Add(drelation);
                #endregion
                //参数
                List<Parameter> lstReportParam = new List<Parameter>();
                #region 参数赋值
                lstReportParam.Add(CreateParameter("送检单位", strHspOrgNameSeleted));//送检单位
                lstReportParam.Add(CreateParameter("打印日期", detReportPrint));//打印日期
                lstReportParam.Add(CreateParameter("条码总份数", string.Format("共{0}份", lstExistsMainBarCode.Count)));
                lstReportParam.Add(CreateParameter("打印人", C_GlobalVariable.P_Login_DisplayName));//打印人
                lstReportParam.Add(CreateParameter("登录单位", C_GlobalVariable.P_LoginOrganizationName));//登录单位
                lstReportParam.Add(CreateParameter("批次号", BatchNo));//登录单位
                #endregion
                //调用Lis的打印基类进行报表预览及打印
                frmCustomerReportBasic frmRpt = new frmCustomerReportBasic();
                frmRpt.strReportName = "检验报告单";
                frmRpt.strReportCode = "LabResultReportList";
                frmRpt.lstReportParam = lstReportParam;
                frmRpt.dsReportSource = dsReport;
                frmRpt.Text = "检验报告单工作清单";
                frmRpt.PrintSetModual = "检验报告单工作清单";
                frmRpt.bVisabledBarTool = bVisabledBarTool;
                if (IsPrint)
                {
                    if (bIsPreView)
                    {
                        frmRpt.bVisabledBarTool = bVisabledBarTool;
                        frmRpt.ShowDialog();
                    }
                    else
                        frmRpt.CreateLisReport();
                }
                else
                {
                    string FilePath = AppDomain.CurrentDomain.BaseDirectory + "生成PDF发送邮件";
                    if (!Directory.Exists(FilePath))
                    {
                        Directory.CreateDirectory(FilePath);
                    }
                    string strPdfName = string.Format("检验报告单工作清单_{0}_{1}", lstReportParam[0].Value, BatchNo);
                    //生成临时pdf文件
                    string tempPdfFileName = string.Format("{0}.pdf", strPdfName);
                    string tempPdfFileFullName = Path.Combine(FilePath, tempPdfFileName);
                    frmRpt.bIsPrint = false;
                    frmRpt.bLoaded = false;
                    frmRpt.IsPreView = bIsPreView;
                    frmRpt.CreatePrintLisReport(false);
                    frmRpt.SavePdfFile(tempPdfFileFullName);
                    //frmRpt.AfteReportPrintParamEvent += new AfterReportPrintHanlder(frRptList_AfteSendMailEvent);
                    frmRpt.Dispose();
                    List<string> tempPdfFileFullNameList = new List<string>();
                    tempPdfFileFullNameList.Add(tempPdfFileFullName);//保存文件名称
                    string msg = "";
                    //bool isSuccessed= SendPDFEmail(strHspOrgCodeSelected, tempPdfFileFullNameList, ref msg);
                    bool isSuccessed = SendMailFromApi(strHspOrgCodeSelected, tempPdfFileFullNameList, ref msg);
                    if (!isAgain)
                    {
                        //更新数据
                        dal.UpdateListTestMainMailBatchNo(lstHspPrintBarCode, BatchNo);
                        //LOG
                        dal.SavePrintListSendMainLog(BatchNo, strHspOrgCodeSelected, "", isSuccessed ? "0" : "1", msg);
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(msg) || msg == "发送成功!")
                        {
                            dal.UpdatePrintListSendMainLog(BatchNo, "重新发送打印清单失败");
                        }
                        else
                        {
                            //重发日志
                            dal.UpdatePrintListSendMainLog(BatchNo, string.Format("重新发送打印清单{0}",msg));
                        }
                    }
                    if (System.IO.File.Exists(tempPdfFileFullName))
                        System.IO.File.Delete(tempPdfFileFullName);
                    if (!isSuccessed)
                    {
                        clsMsg.ShowMsg(string.Format("发送失败:{0}", msg));
                    }
                    else
                    {
                        clsMsg.ShowMsg("发送成功!");
                    }
                }
            }
        }

        /// <summary>
        /// 通过API发送邮件
        /// </summary>
        /// <param name="strHspOrgNameSeleted"></param>
        /// <param name="tempPdfFileFullNameList"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMailFromApi(string strHspOrgNameSeleted, List<string> tempPdfFileFullNameList, ref string msg)
        {
            bool isSendSuccessed = false;
            msg = "";
              List<string> lisTo = new List<string>();
            ReportDal dal = ReportDal.Instance();
            DataTable dtemail = dal.GetOrgByOrgCode(strHspOrgNameSeleted);
            if (dtemail == null || dtemail.Rows.Count==0)
            {
                msg="该机构未维护邮箱";
                return false;
            }
            string email = dtemail.Rows[0]["ORG_EMAIL"].ToString();
            string[] arrTemp = email.Split(';');
            if (arrTemp.Length > 0)
            {
                List<Labway.ReportPrint.Bussiness.Basic.WebApiClient.FileAttachment> fslis = new List<Labway.ReportPrint.Bussiness.Basic.WebApiClient.FileAttachment>();
                foreach (string item in tempPdfFileFullNameList)
                {
                    Labway.ReportPrint.Bussiness.Basic.WebApiClient.FileAttachment fs = new Labway.ReportPrint.Bussiness.Basic.WebApiClient.FileAttachment();
                    fs.FileName = item.Substring(item.LastIndexOf('\\') + 1, item.Length - item.LastIndexOf('\\') - 1);
                    fs.FileContent = File.ReadAllBytes(item);
                    fslis.Add(fs);
                }
              
                // 读取XML配置文件SeverEmail.xml
                XmlDocument doc = new XmlDocument();
                doc = Labway.Lis.Global.CommMethodHelper.GetXmlDataFromDB("SeverEmail.xml");
                //doc.Load("ConfigFile//SeverEmail.xml");//找到ConfigFile//WcfConfig.xml文件
                Labway.ReportPrint.Bussiness.Basic.WebApiClient.Send s = new Labway.ReportPrint.Bussiness.Basic.WebApiClient.Send();
                s.lstToAddress = arrTemp.ToList();
                string orgcode = C_GlobalVariable.P_LoginOrganizationCode;//获取登录的机构编号
                string path="";
                if (doc != null)
                {
                    XmlNode xNServer = doc.SelectSingleNode("/Server");
                    if (xNServer != null)
                    {
                        path = CommMethodHelper.GetXmlNodeAttrValue(xNServer, "path");
                        if (string.IsNullOrEmpty(path))
                        {
                            msg = "未能读取到邮件服务器地址!";
                            return false;
                        }
                        XmlNodeList nodeServerEMail = xNServer.ChildNodes;//获取client下所有的子节点
                        foreach (XmlNode xn in nodeServerEMail)
                        {
                            if (xn.GetType().FullName.Equals("System.Xml.XmlComment"))
                            {
                                continue;
                            }
                            XmlElement xe = (XmlElement)xn;//将子节点转换为XmlElement类型
                            if (xe.GetAttribute("orgcode") == orgcode)
                            {
                                s.subject = CommMethodHelper.GetXmlNodeAttrValue(xn, "subject");
                                s.content = CommMethodHelper.GetXmlNodeAttrValue(xn, "content");
                            }
                        }
                    }
                }
                else
                {
                    msg = "邮箱服务器配置文件读取失败!";
                    return false;
                }
                s.fileAttachments = fslis;
                string json = JsonConvert.SerializeObject(s);
                msg = WebApiClient.AccApi(path, WebApiClient.ApiAccType.Post, null, json);
                if (string.IsNullOrEmpty(msg) || msg == "发送成功!")
                {
                    isSendSuccessed = true;
                }
            }
            else
            {
                msg = "该机构未维护邮箱";
            }
            return isSendSuccessed;
        }
        #endregion
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值