#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