体检系统架构
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

882 lines
38 KiB

#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;
}
/// <summary>
/// PDF to Image
/// </summary>
/// <param name="pdf"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 获取报告单
/// </summary>
/// <param name="eid">体检号</param>
/// <returns></returns>
public static FastReport.Report GetReport(Int64 eid)
{
try
{
var patient = new ReportModel().GetPatientInfo(eid);
if (patient == null) return null;
var fileName =
DAOHelp.GetDataBySQL<Config>($"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;
}
}
/// <summary>
/// 一般体检
/// </summary>
/// <param name="patient"></param>
/// <param name="eid"></param>
/// <param name="filePath"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 快速体检
/// </summary>
/// <param name="patient"></param>
/// <param name="eid"></param>
/// <param name="filePath"></param>
/// <returns></returns>
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<string, object>();
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;
}
/// <summary>
/// 绑定报告单数据源方法
/// </summary>
/// <param name="report">报告</param>
/// <param name="list">数据源 IList</param>
/// <param name="dataSourceName">数据源名称 R</param>
/// <param name="dataObjectName">数据源控件名称 Data1</param>
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;
}
/// <summary>
/// 绑定参数
/// </summary>
/// <param name="report"></param>
/// <param name="dict"></param>
private static void SetParameter(ref FastReport.Report report, Dictionary<string, object> dict)
{
foreach (var item in dict)
{
report.SetParameterValue(item.Key, item.Value);
}
}
/// <summary>
/// 打印个人收费单
/// </summary>
/// <param name="list"></param>
/// <param name="regInfo"></param>
public static FastReport.Report PrintCheckCost(List<EnrollmentCheckCost> 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;
}
}
/// <summary>
/// 打印团体收费单
/// </summary>
/// <param name="list"></param>
/// <param name="regInfo"></param>
public static FastReport.Report PrintTCheckCost(List<EnrollmentCheckCost> 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;
}
}
/// <summary>
/// 打印指引单
/// </summary>
/// <param name="list"></param>
/// <param name="regInfo"></param>
public static FastReport.Report PrintGuide(List<EnrollmentFeeItem> 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;
}
}
/// <summary>
/// 打印申请单
/// </summary>
/// <param name="list"></param>
/// <param name="regInfo"></param>
public static FastReport.Report PrintApply(List<EnrollmentFeeItem> 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;
}
}
/// <summary>
/// 批量打印指引单
/// </summary>
/// <param name="idList"></param>
public static FastReport.Report BatchPrintGuide(List<Int64> 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<EnrollmentFeeItem>();
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;
}
}
/// <summary>
/// 批量打印指收费单
/// </summary>
/// <param name="idList"></param>
public static FastReport.Report BatchPrintCheckCost(List<Int64> 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;
}
}
/// <summary>
/// 批量打印个人报告
/// </summary>
/// <param name="idList"></param>
public static FastReport.Report BatchGetReport(List<Int64> 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<Config>(
$"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;
}
}
}
}