体检系统架构
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.
 
 
 

1076 lines
49 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;
using PEIS.Model.Exam;
namespace PEIS.Utils
{
public static class ReportHelper
{
/// <summary>
/// PDF to Image
/// </summary>
/// <param name="pdf"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 判断是否PDF
/// </summary>
/// <param name="fileBytes"></param>
/// <returns></returns>
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;
}
/// <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);
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;
}
}
/// <summary>
/// 职业病体检
/// </summary>
/// <param name="patient"></param>
/// <param name="eid"></param>
/// <param name="filePath"></param>
/// <returns></returns>
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<object> testList = new List<object>()
{
//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<SymptomReportModele> symptoms = new List<SymptomReportModele>();
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>();
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;
}
/// <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);
// 第三方报告
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;
}
/// <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.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;
}
}
/// <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;
}
}
}
}