#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
/// <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