#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; namespace PEIS.Utils { public static class ReportHelper { // 逆时针旋转图片的函数 public static Image RotateImage(Image img) { // 旋转角度为负90度 float angle = -90f; // 计算旋转后的图像的矩形范围 RectangleF bounds = new RectangleF(0, 0, img.Height, img.Width); // 创建旋转后的位图 Bitmap rotatedImage = new Bitmap((int)bounds.Width, (int)bounds.Height); rotatedImage.SetResolution(img.HorizontalResolution, img.VerticalResolution); using (Graphics g = Graphics.FromImage(rotatedImage)) { // 设置插值模式以改善旋转后图像的质量 g.InterpolationMode = InterpolationMode.HighQualityBicubic; // 设置旋转中心点 g.TranslateTransform(rotatedImage.Width / 2, rotatedImage.Height / 2); // 旋转角度 g.RotateTransform(angle); // 将旋转中心点恢复到原点 g.TranslateTransform(-img.Width / 2, -img.Height / 2); // 绘制旋转后的图片 g.DrawImage(img, new PointF(0, 0)); } return rotatedImage; } /// /// PDF to Image /// /// /// public static Image PdfToImg(byte[] pdf) { try { // 德宏中医院 ECG 心电保存的结果为图片JPG 不是PDF using (var ms = new MemoryStream(pdf, 0, pdf.Length)) { return Image.FromStream(ms, true); } 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.RotateFlip(RotateFlipType.Rotate90FlipNone); bitmap.Save(stream, ImageFormat.Jpeg); var img = stream.ToArray(); using (var ms = new MemoryStream(img, 0, img.Length)) { return Image.FromStream(ms, true); } } } } } } } catch (Exception ex) { Console.WriteLine(@"Error converting PDF to images: " + ex.Message); } return null; } /// /// 获取报告单 /// /// 体检号 /// 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); 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 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); // 登记信息 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(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(); //准备 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.GroupName); 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); if (regInfo.Photo == null) { 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; } } } }