#region CopyRight /**************************************************************** * Project:健康体检信息管理系统(PEIS) * Author:H * CLR Version:4.0 * CreateTime:2023-06-18 * Version:v0.0.1 * Description:报告单获取帮助类 ***************************************************************** * Copyright @ 云南新八达科技有限公司 2023 All rights reserved *****************************************************************/ #endregion CopyRight using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; using DevExpress.XtraPrinting.Native; using FastReport; using PEIS.Entity; using PEIS.Model; using PEIS.Model.Enrollment; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using FastReport.Export.Pdf; using PEIS.Model.Exam; namespace PEIS.Utils { public static class ReportHelper { /// /// PDF to Image /// /// /// public static Image PdfToImg(byte[] pdf) { try { if (IsPdf(pdf)) { // PDF格式 using (var memoryStream = new MemoryStream(pdf)) { using (var pdfDocument = PdfiumViewer.PdfDocument.Load(memoryStream)) { for (var pageIndex = 0; pageIndex < pdfDocument.PageCount; pageIndex++) { using (var bitmap = pdfDocument.Render(pageIndex, 2480, 3508, false)) { using (var stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Jpeg); var img = stream.ToArray(); using (var ms = new MemoryStream(img, 0, img.Length)) { return Image.FromStream(ms, true); } } } } } } } else { // 图片格式 using (var ms = new MemoryStream(pdf, 0, pdf.Length)) { return Image.FromStream(ms, true); } } } catch (Exception ex) { Console.WriteLine(@"Error converting PDF to images: " + ex.Message); } return null; } /// /// 判断是否PDF /// /// /// public static bool IsPdf(byte[] fileBytes) { const string pdfSignature = "%PDF"; if (fileBytes.Length >= pdfSignature.Length) { for (int i = 0; i < pdfSignature.Length; i++) { if (fileBytes[i] != pdfSignature[i]) { return false; } } return true; } return false; } /// /// 获取报告单 /// /// 体检号 /// public static FastReport.Report GetReport(Int64 eid) { try { var patient = new ReportModel().GetPatientInfo(eid); if (patient == null) return null; var fileName = DAOHelp.GetDataBySQL($"SELECT Description FROM Dict_Config where Value='{patient.Type}'") .FirstOrDefault()?.Description ?? "PReport.frx"; var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", fileName); if (!File.Exists(filePath)) { MessageBox.Show($@"未找到报告单模板文件:{fileName}", @"获取报告单失败"); return null; } switch (fileName) { case "Children.frx": return EasyReport(patient, eid, filePath); case "Student.frx": return EasyReport(patient, eid, filePath); case "Teacher.frx": return EasyReport(patient, eid, filePath); case "Work.frx": return EasyReport(patient, eid, filePath); case "Health.frx": return EasyReport(patient, eid, filePath); case "CAPReport.frx": return CAPReport(patient, eid, filePath); default: return General(patient, eid, filePath); } } catch (Exception ex) { LogHelper.Log.Error($@"生成报告单失败:{ex.Message}"); Global.Msg("info", ex.Message); return null; } } public static bool SaveReport(Int64 eid) { try { var report = GetReport(eid); using (var export = new PDFExport()) { using (var ms = new MemoryStream()) { export.Export(report, ms); ms.Flush(); var byteArray = ms.ToArray(); return new ExamReport(eid, byteArray).Save(); } ; } ; } catch (Exception e) { Global.MsgErr($"保存体检报告失败!{e.Message}"); } return false; } public static FastReport.Report GetStatisticalReportCount(DateTime beg, DateTime end, string fileName = "PeopleCount") { var data = new StatisticalReportModel().GetItemsByDateType(beg, end, "PeopleExamDate", 0); //new StatisticalReportModel().GetEFeeItems(beg,end); var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", fileName + ".frx"); rpt.Load(reportFile); rpt.SetParameterValue("HospitalName", Global._hospital.Name); rpt.SetParameterValue("DateBetween", $@"{beg:yyyy-MM-dd}--{end:yyyy-MM-dd}"); rpt.SetParameterValue("Type", "按体检日期统计"); SetDataSource(ref rpt, data, "p", "PeopleCount"); rpt.Prepare(); return rpt; } catch (Exception ex) { Global.Msg("err", ex.Message); return null; } } public static FastReport.Report GetStatisticalReportIncome(DateTime beg, DateTime end, string fileName = "CostCount") { var data = new StatisticalReportModel().GetEFeeItems(beg, end, 0,"9999"); //new StatisticalReportModel().GetEFeeItems(beg,end); var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", fileName + ".frx"); rpt.Load(reportFile); rpt.SetParameterValue("HospitalName", Global._hospital.Name); rpt.SetParameterValue("DateBetween", $@"{beg:yyyy-MM-dd}--{end:yyyy-MM-dd}"); rpt.SetParameterValue("Type", "按体检日期统计"); rpt.SetParameterValue("DeptName", "所有科室"); SetDataSource(ref rpt, data, "p", "CostCount"); rpt.Prepare(); return rpt; } catch (Exception ex) { Global.Msg("err", ex.Message); return null; } } /// /// 职业病体检 /// /// /// /// /// private static FastReport.Report CAPReport(EnrollmentPatient patient, Int64 eid, string filePath) { var rpt = new FastReport.Report(); //实例化一个Report报表 rpt.Load(filePath); var lstEFeeItems = new ReportModel().GetEFeeItem(eid); var lstConclusions = new ReportModel().GetExamConclusions(eid); var lstGeneral = new ReportModel().GetGeneralResult(eid); var lstLis = new ReportModel().GetLisResult(eid); var lstPacs = new ReportModel().GetPacsResult(eid); var lstPacsPhotos = new ReportModel().GetPacsPhoto(eid); var lstSymptom = new CareerHisInqModel().GetCareerHisInqSymptom(eid); var examCareerHisInq = new CareerHisInqModel().GetExamCareerHisInqByEid(eid); var examEmploymentHis = new CareerHisInqModel().GetEmploymentHises(eid); // 登记信息 rpt.SetParameterValue("PatientName", patient.Name); rpt.SetParameterValue("CardNo", patient.CardNo); rpt.SetParameterValue("Nation", patient.Nation); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", patient.Sex == "1" ? "男" : patient.Sex == "2" ? "女" : ""); rpt.SetParameterValue("ExamID", patient.ID.ToString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("TeamName", patient.OrgName); rpt.SetParameterValue("GroupName", patient.GroupName); rpt.SetParameterValue("Company", patient.Company); rpt.SetParameterValue("ExamType", patient.Type); rpt.SetParameterValue("Address", patient.Address1); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("FinishPerson", patient.Finisher); rpt.SetParameterValue("FinishDate", patient.FinishTime?.ToShortDateString()); rpt.SetParameterValue("HospitalName", Global._hospital.Name); rpt.SetParameterValue("DeptName", patient.DeptName); rpt.SetParameterValue("EnrollmentType", patient.JobStatus); rpt.SetParameterValue("IDCard", patient.CardNo); rpt.SetParameterValue("HospitalAddress", "无"); rpt.SetParameterValue("HospitalCertificate", "无"); rpt.SetParameterValue("HospitalTel", Global._hospital.Tel); if (string.IsNullOrEmpty(patient.Photo)) { rpt.SetParameterValue("Avatar", patient.Photo); } else { byte[] imageBytes = Convert.FromBase64String(patient.Photo); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); using (MemoryStream stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); rpt.SetParameterValue("Avatar", Convert.ToBase64String(stream.ToArray())); } } } List testList = new List() { //new { PatientName="张三1",Sex="男",IDCard="530128199403243610",MaritalStatus="已婚",HDTAge="10年",HDAge="5年",HDStr="高温、高压"}, }; foreach (var item in examEmploymentHis) { testList.Add(new { PatientName = patient.Name, Sex = patient.Sex == "1" ? "男" : patient.Sex == "2" ? "女" : "", IDCard = patient.CardNo, MaritalStatus = patient.Marriage, HDTAge = "", HDAge = "", HDStr = item.HarmfulFactors }); } List symptoms = new List(); for (int i = 0; i < lstSymptom.Count; i = i + 2) { SymptomReportModele sm = new SymptomReportModele(); sm.SMName0 = $"{lstSymptom[i].DispOrder}、{lstSymptom[i].SMName}"; sm.SMValue0 = lstSymptom[i].SMValue; if ((i + 1) < lstSymptom.Count) { sm.SMName1 = $"{lstSymptom[i + 1].DispOrder}、{lstSymptom[i + 1].SMName}"; sm.SMValue1 = lstSymptom[i + 1].SMValue; } symptoms.Add(sm); } var careerHisInq = new List(); ECInqReportModele eCInqReport = new ECInqReportModele(); if (examCareerHisInq != null) { eCInqReport.PastHistory = string.IsNullOrEmpty(examCareerHisInq.PastHistory) ? "/" : examCareerHisInq.PastHistory; eCInqReport.Menarche = string.IsNullOrEmpty(examCareerHisInq.Menarche) ? "/" : examCareerHisInq.Menarche; eCInqReport.MenarchePeriod = string.IsNullOrEmpty(examCareerHisInq.MenarchePeriod) ? "/" : examCareerHisInq.MenarchePeriod; eCInqReport.MenarcheCycle = string.IsNullOrEmpty(examCareerHisInq.MenarcheCycle) ? "/" : examCareerHisInq.MenarcheCycle; eCInqReport.LastMenstrualPod = string.IsNullOrEmpty(examCareerHisInq.LastMenstrualPod) ? "/" : examCareerHisInq.LastMenstrualPod; eCInqReport.ExistingChildren = string.IsNullOrEmpty(examCareerHisInq.ExistingChildren) ? "/" : examCareerHisInq.ExistingChildren; eCInqReport.Abortion = string.IsNullOrEmpty(examCareerHisInq.Abortion) ? "/" : examCareerHisInq.Abortion; eCInqReport.PrematureDelivery = string.IsNullOrEmpty(examCareerHisInq.PrematureDelivery) ? "/" : examCareerHisInq.PrematureDelivery; eCInqReport.Stillbirth = string.IsNullOrEmpty(examCareerHisInq.Stillbirth) ? "/" : examCareerHisInq.Stillbirth; eCInqReport.AbnormalFetus = string.IsNullOrEmpty(examCareerHisInq.AbnormalFetus) ? "/" : examCareerHisInq.AbnormalFetus; if (examCareerHisInq.SmokeState == 1) eCInqReport.SmokeState_1 = true; if (examCareerHisInq.SmokeState == 2) eCInqReport.SmokeState_2 = true; if (examCareerHisInq.SmokeState == 3) eCInqReport.SmokeState_3 = true; eCInqReport.SmokeQuantity = string.IsNullOrEmpty(examCareerHisInq.SmokeQuantity) ? "/" : examCareerHisInq.SmokeQuantity; eCInqReport.SmokeYears = string.IsNullOrEmpty(examCareerHisInq.SmokeQuantity) ? "/" : examCareerHisInq.SmokeYears; eCInqReport.SmokeMonths = string.IsNullOrEmpty(examCareerHisInq.SmokeMonths) ? "/" : examCareerHisInq.SmokeMonths; if (examCareerHisInq.DrinkState == 1) eCInqReport.DrinkState_1 = true; if (examCareerHisInq.DrinkState == 2) eCInqReport.DrinkState_2 = true; if (examCareerHisInq.DrinkState == 3) eCInqReport.DrinkState_3 = true; eCInqReport.DrinkQuantity = string.IsNullOrEmpty(examCareerHisInq.DrinkQuantity) ? "/" : examCareerHisInq.DrinkQuantity; eCInqReport.DrinkYears = string.IsNullOrEmpty(examCareerHisInq.DrinkYears) ? "/" : examCareerHisInq.DrinkYears; eCInqReport.SleepCondition = string.IsNullOrEmpty(examCareerHisInq.SleepCondition) ? "/" : examCareerHisInq.SleepCondition; eCInqReport.Other = string.IsNullOrEmpty(examCareerHisInq.Other) ? "/" : examCareerHisInq.Other; } else { eCInqReport.PastHistory = "/"; eCInqReport.Menarche = "/"; eCInqReport.MenarchePeriod = "/"; eCInqReport.MenarcheCycle = "/"; eCInqReport.LastMenstrualPod = "/"; eCInqReport.ExistingChildren = "/"; eCInqReport.Abortion = "/"; eCInqReport.PrematureDelivery = "/"; eCInqReport.Stillbirth = "/"; eCInqReport.AbnormalFetus = "/"; if (examCareerHisInq.SmokeState == 1) eCInqReport.SmokeState_1 = true; if (examCareerHisInq.SmokeState == 2) eCInqReport.SmokeState_2 = true; if (examCareerHisInq.SmokeState == 3) eCInqReport.SmokeState_3 = true; eCInqReport.SmokeQuantity = "/"; eCInqReport.SmokeYears = "/"; eCInqReport.SmokeMonths = "/"; if (examCareerHisInq.DrinkState == 1) eCInqReport.DrinkState_1 = true; if (examCareerHisInq.DrinkState == 2) eCInqReport.DrinkState_2 = true; if (examCareerHisInq.DrinkState == 3) eCInqReport.DrinkState_3 = true; eCInqReport.DrinkQuantity = "/"; eCInqReport.DrinkYears = "/"; eCInqReport.SleepCondition = "/"; eCInqReport.Other = "/"; } careerHisInq.Add(eCInqReport); string Conclusion = string.Empty; string Suggestion = string.Empty; if (lstConclusions!=null&& lstConclusions.Count>0) { for (int i = 0; i < lstConclusions.Count; i++) { Conclusion +=$"{(i + 1)}、{lstConclusions[i].Conclusion}。"; Suggestion+= $"{(i + 1)}、{lstConclusions[i].Suggestion}"; } } rpt.SetParameterValue("Conclusion", Conclusion); rpt.SetParameterValue("Suggestion", Suggestion); // 收费列表 SetDataSource(ref rpt, lstEFeeItems, "F", "FeeItems"); // 总结结论词 SetDataSource(ref rpt, lstConclusions, "C", "Conclusion"); //一般检查 SetDataSource(ref rpt, lstGeneral, "G", "General"); //PACS SetDataSource(ref rpt, lstPacs, "P", "PACS"); //LIS SetDataSource(ref rpt, lstLis, "L", "LIS"); // PacsImage SetDataSource(ref rpt, lstPacsPhotos, "I", "PACSImage"); // 职业史 SetDataSource(ref rpt, testList, "CAH", "CAItems"); //问诊 SetDataSource(ref rpt, careerHisInq, "CAC", "CareerHisInq"); //症状 SetDataSource(ref rpt, symptoms, "CAS", "Symptoms"); rpt.Prepare(); //准备 return rpt; } /// /// 一般体检 /// /// /// /// /// private static FastReport.Report General(EnrollmentPatient patient, Int64 eid, string filePath) { var rpt = new FastReport.Report(); //实例化一个Report报表 rpt.Load(filePath); var lstEFeeItems = new ReportModel().GetEFeeItem(eid); var lstConclusions = new ReportModel().GetExamConclusions(eid); var lstGeneral = new ReportModel().GetGeneralResult(eid); var lstLis = new ReportModel().GetLisResult(eid); var lstPacs = new ReportModel().GetPacsResult(eid); var lstPacsPhotos = new ReportModel().GetPacsPhoto(eid); // 第三方报告 var lstExts = new ReportModel().GetReportExt(eid); // 登记信息 rpt.SetParameterValue("PatientName", patient.Name); rpt.SetParameterValue("CardNo", patient.CardNo); rpt.SetParameterValue("Nation", patient.Nation); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", patient.Sex == "1" ? "男" : patient.Sex == "2" ? "女" : ""); rpt.SetParameterValue("ExamID", patient.ID.ToString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("TeamName", patient.OrgName); rpt.SetParameterValue("GroupName", patient.GroupName); rpt.SetParameterValue("Company", patient.Company); rpt.SetParameterValue("ExamType", patient.Type); rpt.SetParameterValue("Address", patient.Address1); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("FinishPerson", patient.Finisher); rpt.SetParameterValue("FinishDate", patient.FinishTime?.ToShortDateString()); rpt.SetParameterValue("HospitalName", Global._hospital.Name); rpt.SetParameterValue("DeptName", patient.DeptName); if (string.IsNullOrEmpty(patient.Photo)) { rpt.SetParameterValue("Avatar", patient.Photo); } else { byte[] imageBytes = Convert.FromBase64String(patient.Photo); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); using (MemoryStream stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); rpt.SetParameterValue("Avatar", Convert.ToBase64String(stream.ToArray())); } } } // 收费列表 SetDataSource(ref rpt, lstEFeeItems, "F", "FeeItems"); // 总结结论词 SetDataSource(ref rpt, lstConclusions, "C", "Conclusion"); //一般检查 SetDataSource(ref rpt, lstGeneral, "G", "General"); //PACS SetDataSource(ref rpt, lstPacs, "P", "PACS"); //LIS SetDataSource(ref rpt, lstLis, "L", "LIS"); // PacsImage SetDataSource(ref rpt, lstPacsPhotos.Concat(lstExts.Where(w => w.ReportImg != null).Select(s => new Entity.Report { ReportImage = s.ReportImg })), "I", "PACSImage"); rpt.Prepare(); //准备 return rpt; } /// /// 快速体检 /// /// /// /// /// private static FastReport.Report EasyReport(EnrollmentPatient patient, Int64 eid, string filePath) { var rpt = new FastReport.Report(); //实例化一个Report报表 rpt.Load(filePath); var lstExts = new ReportModel().GetReportExt(eid); var lstChildren = new ReportModel().GetFastResult(eid); var lstSummary = new TotalModel().GetSummary(eid); var lstConclusion = new ReportModel().GetExamConclusions(eid); var dict = new Dictionary(); lstChildren.ForEach(item => { if (!dict.ContainsKey($"param{item.RID}")) dict.Add($"param{item.RID}", item.TextResult); }); // 小结 var txtSummary = ""; lstSummary.ForEach(item => { if (!string.IsNullOrEmpty(item.Summary)) txtSummary += item.Summary + Environment.NewLine; }); // 结论词 var txtConclusion = ""; lstConclusion.ForEach(item => { if (!string.IsNullOrEmpty(item.Conclusion)) txtConclusion += $@"【{item.Conclusion}】:" + item.Suggestion + Environment.NewLine; }); // 登记信息 rpt.SetParameterValue("PatientName", patient.Name); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", patient.Sex == "1" ? "男" : patient.Sex == "2" ? "女" : ""); rpt.SetParameterValue("Nation", patient.Nation); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("Avatar", patient.Photo); rpt.SetParameterValue("Education", patient.Education); rpt.SetParameterValue("Birthday", patient.Birthday?.ToShortDateString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Contactor1", patient.Contactor1); rpt.SetParameterValue("Contactor2", patient.Contactor2); rpt.SetParameterValue("Address", patient.Address1); rpt.SetParameterValue("Company", patient.Company); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("Finisher", patient.Finisher); rpt.SetParameterValue("HospitalName", Global._hospital.Name); rpt.SetParameterValue("CardNo", patient.CardNo); rpt.SetParameterValue("Summary", txtSummary); rpt.SetParameterValue("Conclusion", txtConclusion); SetParameter(ref rpt, dict); // 第三方报告 //SetDataSource(ref rpt, lstExts, "I", "ImageList"); rpt.Prepare(); //准备 return rpt; } /// /// 绑定报告单数据源方法 /// /// 报告 /// 数据源 IList /// 数据源名称 R /// 数据源控件名称 Data1 private static void SetDataSource(ref FastReport.Report report, IEnumerable list, string dataSourceName = "R", string dataObjectName = "Data1") { report.RegisterData(list, dataSourceName); if (report.Report.FindObject(dataObjectName) is DataBand dataBand) dataBand.DataSource = report.Report.GetDataSource(dataSourceName); report.GetDataSource(dataSourceName).Enabled = true; } /// /// 绑定参数 /// /// /// private static void SetParameter(ref FastReport.Report report, Dictionary dict) { foreach (var item in dict) { report.SetParameterValue(item.Key, item.Value); } } /// /// 打印个人收费单 /// /// /// public static FastReport.Report PrintCheckCost(List list, EnrollmentPatient regInfo) { var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "CheckCost.frx"); //var reportFile = "D:/Code/project/PEIS/CheckCost.frx"; rpt.Load(reportFile); // 登记信息 rpt.SetParameterValue("Name", regInfo.Name); rpt.SetParameterValue("Age", regInfo.Age + regInfo.AgeClass); rpt.SetParameterValue("Sex", "男".Equals(regInfo.Sex) ? "男" : "女".Equals(regInfo.Sex) ? "女" : "1".Equals(regInfo.Sex) ? "男" : "女"); rpt.SetParameterValue("ExamID", regInfo.ID.ToString()); rpt.SetParameterValue("ExamDate", regInfo.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", regInfo.Marriage); rpt.SetParameterValue("TeamName", regInfo.OrgName); rpt.SetParameterValue("GroupName", regInfo.GroupName); rpt.SetParameterValue("ExamType", regInfo.Type); rpt.SetParameterValue("Tel", regInfo.Tel1); rpt.SetParameterValue("Avatar", regInfo.Photo); rpt.SetParameterValue("Nation", string.IsNullOrEmpty(regInfo.Nation) ? "未知" : regInfo.Nation); rpt.SetParameterValue("BirthDay", regInfo.Birthday?.ToShortDateString()); rpt.SetParameterValue("Address", regInfo.Address1); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); rpt.SetParameterValue("Url", Global.GetWeChatPayUrl() + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(regInfo.CardNo))); // 收费单 rpt.RegisterData(list, "C"); DataBand checkCost = rpt.Report.FindObject("CheckCost") as DataBand; checkCost.DataSource = rpt.Report.GetDataSource("C"); rpt.GetDataSource("C").Enabled = true; rpt.Prepare(); //准备 return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 打印团体收费单 /// /// /// public static FastReport.Report PrintTCheckCost(List list, EnrollmentOrg regInfo) { var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "TCheckCost.frx"); //var reportFile = "D:/Code/project/PEIS/TCheckCost.frx"; rpt.Load(reportFile); // 登记信息 rpt.SetParameterValue("Name", regInfo.Name); rpt.SetParameterValue("ExamID", regInfo.ID.ToString()); rpt.SetParameterValue("ExamDate", regInfo.ExamDate?.ToShortDateString()); rpt.SetParameterValue("Contactor", regInfo.Contactor1); rpt.SetParameterValue("Tel", regInfo.Tel1); rpt.SetParameterValue("Address", regInfo.Address); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); // 收费单 rpt.RegisterData(list, "C"); DataBand checkCost = rpt.Report.FindObject("CheckCost") as DataBand; checkCost.DataSource = rpt.Report.GetDataSource("C"); rpt.GetDataSource("C").Enabled = true; rpt.Prepare(); //准备 return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 打印指引单 /// /// /// public static FastReport.Report PrintGuide(List list, EnrollmentPatient regInfo) { var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "Guide.frx"); //var reportFile = "D:/Code/project/PEIS/Guide.frx"; rpt.Load(reportFile); // 收费列表 rpt.RegisterData(list, "F"); DataBand FeeItems = rpt.Report.FindObject("FeeItems") as DataBand; FeeItems.DataSource = rpt.Report.GetDataSource("F"); rpt.GetDataSource("F").Enabled = true; // 登记信息 rpt.SetParameterValue("Name", regInfo.Name); rpt.SetParameterValue("Age", regInfo.Age + regInfo.AgeClass); rpt.SetParameterValue("Sex", "男".Equals(regInfo.Sex) ? "男" : "女".Equals(regInfo.Sex) ? "女" : "1".Equals(regInfo.Sex) ? "男" : "女"); rpt.SetParameterValue("ExamID", regInfo.ID.ToString()); rpt.SetParameterValue("ExamDate", regInfo.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", regInfo.Marriage); rpt.SetParameterValue("TeamName", regInfo.OrgName); rpt.SetParameterValue("GroupName", regInfo.DeptName); rpt.SetParameterValue("ExamType", regInfo.Type); rpt.SetParameterValue("Tel", regInfo.Tel1); rpt.SetParameterValue("Nation", regInfo.Nation); rpt.SetParameterValue("CardNo", regInfo.CardNo); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); rpt.SetParameterValue("Remark", regInfo.Description); if (string.IsNullOrEmpty(regInfo.Photo)) { rpt.SetParameterValue("Avatar", regInfo.Photo); } else { byte[] imageBytes = Convert.FromBase64String(regInfo.Photo); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); using (MemoryStream stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); rpt.SetParameterValue("Avatar", Convert.ToBase64String(stream.ToArray())); } } } rpt.Prepare(); //准备 return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 打印申请单 /// /// /// public static FastReport.Report PrintApply(List list, EnrollmentPatient regInfo) { var rpt = new FastReport.Report(); //实例化一个Report报表 try { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "Apply.frx"); //var reportFile = "D:/Code/project/PEIS/Apply.frx"; rpt.Load(reportFile); // 检查 rpt.RegisterData(list.Where(w => w.ItemClass != "检验").ToList(), "E"); DataBand ExamItem = rpt.Report.FindObject("ExamItem") as DataBand; ExamItem.DataSource = rpt.Report.GetDataSource("E"); rpt.GetDataSource("E").Enabled = true; // 检验 rpt.RegisterData(list.Where(w => w.ItemClass == "检验").ToList(), "T"); DataBand TestItem = rpt.Report.FindObject("TestItem") as DataBand; TestItem.DataSource = rpt.Report.GetDataSource("T"); rpt.GetDataSource("T").Enabled = true; // 登记信息 rpt.SetParameterValue("Name", regInfo.Name); rpt.SetParameterValue("Age", regInfo.Age + regInfo.AgeClass); rpt.SetParameterValue("Sex", "男".Equals(regInfo.Sex) ? "男" : "女".Equals(regInfo.Sex) ? "女" : "1".Equals(regInfo.Sex) ? "男" : "女"); rpt.SetParameterValue("ExamID", regInfo.ID.ToString()); rpt.SetParameterValue("ExamDate", regInfo.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", regInfo.Marriage); rpt.SetParameterValue("TeamName", regInfo.OrgName); rpt.SetParameterValue("GroupName", regInfo.GroupName); rpt.SetParameterValue("ExamType", regInfo.Type); rpt.SetParameterValue("Tel", regInfo.Tel1); rpt.SetParameterValue("Avatar", regInfo.Photo); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); rpt.SetParameterValue("BirthDay", regInfo.Birthday?.ToShortDateString()); rpt.Prepare(); //准备 return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 批量打印指引单 /// /// public static FastReport.Report BatchPrintGuide(List idList) { try { var rpt = new FastReport.Report(); //实例化一个Report报表 var i = 0; foreach (var id in idList) { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "Guide.frx"); //var reportFile = "D:/Code/project/PEIS/Guide.frx"; rpt.Load(reportFile); var patient = new EnrollmentPatientModel().GetEnrollmentPatient(id); if (patient.SignTime == null) continue; var feeItems = new EnrollmentPatientModel().GetItemsByEID(id); var items = new List(); feeItems.Where(w => w.OrderNo != null).GroupBy(g => g.DeptCode).ForEach(dept => { var item = new EnrollmentFeeItem() { DeptName = dept.FirstOrDefault()?.DeptName, FeeItemName = string.Join(@"、", dept.Select(s => s.FeeItemName).ToList()), Address = dept.FirstOrDefault()?.Address }; items.Add(item); }); // 登记信息 rpt.SetParameterValue("Name", patient.Name); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", "男".Equals(patient.Sex) ? "男" : "女".Equals(patient.Sex) ? "女" : "1".Equals(patient.Sex) ? "男" : "女"); rpt.SetParameterValue("ExamID", patient.ID.ToString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("TeamName", patient.OrgName); rpt.SetParameterValue("GroupName", patient.GroupName); rpt.SetParameterValue("ExamType", patient.Type); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("Nation", patient.Nation); rpt.SetParameterValue("CardNo", patient.CardNo); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); if (patient.Photo == null) { rpt.SetParameterValue("Avatar", patient.Photo); } else { byte[] imageBytes = Convert.FromBase64String(patient.Photo); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); using (MemoryStream stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); rpt.SetParameterValue("Avatar", Convert.ToBase64String(stream.ToArray())); } } } // 收费列表 rpt.RegisterData(items, "F"); DataBand FeeItems = rpt.Report.FindObject("FeeItems") as DataBand; FeeItems.DataSource = rpt.Report.GetDataSource("F"); rpt.GetDataSource("F").Enabled = true; rpt.Prepare(i > 0); //准备 i++; } return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 批量打印指收费单 /// /// public static FastReport.Report BatchPrintCheckCost(List idList) { try { var rpt = new FastReport.Report(); //实例化一个Report报表 var i = 0; foreach (var id in idList) { var reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "CheckCost.frx"); //var reportFile = "D:/Code/project/PEIS/Guide.frx"; rpt.Load(reportFile); var patient = new EnrollmentPatientModel().GetEnrollmentPatient(id); var list = new EnrollmentCheckCostModel().GetCheckCost(0, id); if (list.Where(w => w.CostTime == null).Count() == 0) { continue; } /// 登记信息 rpt.SetParameterValue("Name", patient.Name); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", "男".Equals(patient.Sex) ? "男" : "女".Equals(patient.Sex) ? "女" : "1".Equals(patient.Sex) ? "男" : "女"); rpt.SetParameterValue("ExamID", patient.ID.ToString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("TeamName", patient.OrgName); rpt.SetParameterValue("GroupName", patient.GroupName); rpt.SetParameterValue("ExamType", patient.Type); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("Avatar", patient.Photo); rpt.SetParameterValue("Nation", string.IsNullOrEmpty(patient.Nation) ? "未知" : patient.Nation); rpt.SetParameterValue("BirthDay", patient.Birthday?.ToShortDateString()); rpt.SetParameterValue("Address", patient.Address1); rpt.SetParameterValue("HospitalName", Global._hospital?.Name); rpt.SetParameterValue("Url", Global.GetWeChatPayUrl() + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(patient.CardNo))); // 收费单 rpt.RegisterData(list.Where(w => w.CostTime == null && w.OEID == null).ToList(), "C"); ; DataBand checkCost = rpt.Report.FindObject("CheckCost") as DataBand; checkCost.DataSource = rpt.Report.GetDataSource("C"); rpt.GetDataSource("C").Enabled = true; rpt.Prepare(i > 0); //准备 i++; } return rpt; } catch (Exception ex) { Global.Msg("info", ex.Message); return null; } } /// /// 批量打印个人报告 /// /// public static FastReport.Report BatchGetReport(List idlist) { try { var rpt = new FastReport.Report(); var i = 0; foreach (var eid in idlist) { var patient = new ReportModel().GetPatientInfo(eid); if (patient == null) return null; var fileName = DAOHelp.GetDataBySQL( $"SELECT Description FROM Dict_Config where Value='{patient.Type}'").FirstOrDefault() ?.Description ?? "PReport.frx"; var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", fileName); if (!File.Exists(filePath)) { MessageBox.Show($@"未找到报告单模板文件:{fileName}", @"获取报告单失败"); return null; } if (fileName != "PReport.frx") { rpt = EasyReport(patient, eid, filePath); rpt.Prepare(i > 0); } else { rpt.Load(filePath); var lstEFeeItems = new ReportModel().GetEFeeItem(eid); var lstConclusions = new ReportModel().GetExamConclusions(eid); var lstGeneral = new ReportModel().GetGeneralResult(eid); var lstLis = new ReportModel().GetLisResult(eid); var lstPacs = new ReportModel().GetPacsResult(eid); var lstPacsPhotos = new ReportModel().GetPacsPhoto(eid); // 登记信息 rpt.SetParameterValue("PatientName", patient.Name); rpt.SetParameterValue("CardNo", patient.CardNo); rpt.SetParameterValue("Nation", patient.Nation); rpt.SetParameterValue("Age", patient.Age + patient.AgeClass); rpt.SetParameterValue("Sex", patient.Sex == "1" ? "男" : patient.Sex == "2" ? "女" : ""); rpt.SetParameterValue("ExamID", patient.ID.ToString()); rpt.SetParameterValue("ExamDate", patient.SignTime?.ToShortDateString()); rpt.SetParameterValue("Marriage", patient.Marriage); rpt.SetParameterValue("TeamName", patient.OrgName); rpt.SetParameterValue("GroupName", patient.GroupName); rpt.SetParameterValue("ExamType", patient.Type); rpt.SetParameterValue("Address", patient.Address1); rpt.SetParameterValue("Tel", patient.Tel1); rpt.SetParameterValue("FinishPerson", patient.Finisher); rpt.SetParameterValue("FinishDate", patient.FinishTime?.ToShortDateString()); rpt.SetParameterValue("HospitalName", Global._hospital.Name); if (patient.Photo == null) { rpt.SetParameterValue("Avatar", patient.Photo); } else { byte[] imageBytes = Convert.FromBase64String(patient.Photo); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image image = Image.FromStream(ms); using (MemoryStream stream = new MemoryStream()) { image.Save(stream, ImageFormat.Png); rpt.SetParameterValue("Avatar", Convert.ToBase64String(stream.ToArray())); } } } // 收费列表 SetDataSource(ref rpt, lstEFeeItems, "F", "FeeItems"); // 总结结论词 SetDataSource(ref rpt, lstConclusions, "C", "Conclusion"); //一般检查 SetDataSource(ref rpt, lstGeneral, "G", "General"); //PACS SetDataSource(ref rpt, lstPacs, "P", "PACS"); //LIS SetDataSource(ref rpt, lstLis, "L", "LIS"); // PacsImage SetDataSource(ref rpt, lstPacsPhotos, "I", "PACSImage"); rpt.Prepare(i > 0); } i++; } return rpt; } catch (Exception ex) { LogHelper.Log.Error($@"生成报告单失败:{ex.Message}"); Global.Msg("info", ex.Message); return null; } } } }