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
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;
|
|
}
|
|
}
|
|
}
|
|
} |